1,io模型:

  阻塞io、非阻塞io、io多路复用,信号驱动io。

阻塞Io与非阻塞io的转换,可用fcntl()函数

  #include<unistd.h>

  #include<fcntl.h> 

 int fcntl(int fd,int cmd,...);

2,io多路复用

  在应用程序中同时处理多路输入输出流

  若采用阻塞模式,将得不到预期的目的

   若采用非阻塞模式,对多个输入进行轮询,则浪费CPU资源

   若设置多个进程,分别处理一条数据通路,将新产生进程间的同步与通信问题

    使得程序变得过于复杂。

  这时,比较好的方法是使用IO多路复用,其基本思想是:

    先构造一张有关描述符的表,然后调用一个函数。

    当这些文件描述符中的一个或多个已准备好进行IO函数时,函数才返回

    函数返回时,高诉进程哪个描述符已经就绪,可以进行IO操作。

  使用IO多路复用时,主要用到以下函数(LINUX)

  int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set * exceptfds,struct timeval * timeout);

  void FD_ZERO(fd_set *set);

  void FD_SET(int fd,fd_set *set);

  void FD_CLR(int fd,fd_set *set);

  int FD_ISSET(int fd,fd_set *set);

莫做伸手党。

3,实现TCP并发服务器

  方法一:通过使用父子进程实现tcp并发服务器

  方法二:使用select函数实现tcp并发服务器

法一:

  socket();

  sockaddr_in;

  bind();

  listen();

  while(1)

  {

  accept();

  pid = fork();

  if(pid > 0){}父进程负责连接

  else if(pid == 0){

  while(1)

  {

  recv()/send();

  }

  }

  }

  这里有个难点:一个客户端退出后,如何避免对应的“服务器”进程,编程僵尸进程?

        解决办法是:采用信号,来回收客户端对应“服务器的资源”。

  法二:笔者也在琢磨。。。。。。

linux 网络编程 3---(io多路复用,tcp并发)的更多相关文章

  1. Linux 网络编程(IO模型)

    针对linux 操作系统的5类IO模型,阻塞式.非阻塞式.多路复用.信号驱动和异步IO进行整理,参考<linux网络编程>及相关网络资料. 阻塞模式 在socket编程(如下图)中调用如下 ...

  2. Python网络编程:IO多路复用

    io多路复用:可以监听多个文件描述符(socket对象)(文件句柄),一旦文件句柄出现变化,即可感知. sk1 = socket.socket() sk1.bind(('127.0.0.1',8001 ...

  3. UNIX/Linux网络编程基础:图解TCP/IP协议栈

    目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...

  4. linux网络编程学习笔记之三 -----多进程并发服务端

    首先是fork()函数.移步APUE 8.3.  比較清晰的解释能够參考http://blog.csdn.net/lingdxuyan/article/details/4993883和http://w ...

  5. Linux网络编程之聊天程序(TCP协议之select)

    服务器端:server.c #include <stdio.h> #include <stdlib.h> #include <errno.h> #include & ...

  6. Linux 网络编程详解七(并发僵尸进程处理)

    在上一篇程序框架中,解决了子进程退出,父进程继续存在的功能,但是多条客户端连接如果同一时间并行退出,导致服务器端多个子进程同一时间全部退出,而SIGCHLD是不可靠信号,同时来多条信号可能无法处理,导 ...

  7. linux网络编程基础--(转自网络)

    转自 http://www.cnblogs.com/MyLove-Summer/p/5215287.html Linux下的网络编程指的是socket套接字编程,入门比较简单. 1. socket套接 ...

  8. Linux 网络编程的5种IO模型:多路复用(select/poll/epoll)

    Linux 网络编程的5种IO模型:多路复用(select/poll/epoll) 背景 我们在上一讲 Linux 网络编程的5种IO模型:阻塞IO与非阻塞IO中,对于其中的 阻塞/非阻塞IO 进行了 ...

  9. Linux网络编程——tcp并发服务器(poll实现)

    想详细彻底地了解poll或看懂下面的代码请参考<Linux网络编程——I/O复用之poll函数> 代码: #include <string.h> #include <st ...

  10. Linux 网络编程的5种IO模型:信号驱动IO模型

    Linux 网络编程的5种IO模型:信号驱动IO模型 背景 上一讲 Linux 网络编程的5种IO模型:多路复用(select/poll/epoll) 我们讲解了多路复用等方面的知识,以及有关例程. ...

随机推荐

  1. Task执行内幕与结果处理解密

    本课主题 Task执行内幕与结果处理解密 引言 这一章我们主要关心的是 Task 是怎样被计算的以及结果是怎么被处理的 了解 Task 是怎样被计算的以及结果是怎么被处理的 Task 执行原理流程图 ...

  2. CountDownLatch的简单使用

    from https://www.jianshu.com/p/cef6243cdfd9 1.CountDownLatch是什么? CountDownLatch是一个同步工具类,它允许一个或多个线程一直 ...

  3. July 10th 2017 Week 28th Monday

    I get that look a lot, but I never let it get to me. 我常常受到异样的目光,但我从不把它们放在眼里. I don't feel good these ...

  4. January 19 2017 Week 3 Thursday

    What a man needs most is appreciated. 人性最深切的需求就是渴望别人的赞赏. Being appreciated by others is very importa ...

  5. 马云18年前制止偷井盖视频走红 2013-05-10 11:00:37 来源: 新快报(广州) 有0人参与 分享到 网易微博 新浪微博 腾讯空间 人人网 有道云笔记 在一次访谈中,即将卸任阿里巴巴CEO的马云自曝了他第一次上电视是在1995年。“我刚开始创

    马云18年前制止偷井盖视频走红 2013-05-10 11:00:37 来源: 新快报(广州) 有0人参与   分享到 网易微博 新浪微博 腾讯空间 人人网 有道云笔记 在一次访谈中,即将卸任阿里巴巴 ...

  6. 分布式链路跟踪系统架构SkyWalking和zipkin和pinpoint

    Net和Java基于zipkin的全链路追踪 https://www.cnblogs.com/zhangs1986/p/8966051.html 在各大厂分布式链路跟踪系统架构对比 中已经介绍了几大框 ...

  7. Override和Overload的含义去区别

    java中的继承,方法覆盖(重写)override与方法的重载overload的区别  方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现.   重写(Ove ...

  8. Django 创建model的一些注意事项

    自增主键字段¶ 默认情况下,Django 会给每个模型添加下面这个字段: id = models.AutoField(primary_key=True) 这是一个自增主键字段. 如果你想指定一个自定义 ...

  9. PHP------练习------投票

    练习------投票 一 .题目要求: 二 .做法 [1]建立数据库 表名:diaoyantimu 表名: diaoyanxuanxiang [2]封装类文件 <?php class DBDA ...

  10. 4.spring:@Profile,AOP

    Profile: 可以根据当前的环境,动态激活和切换一系列的组件功能 指定组件在那个环境下才能被注册到容器中,不指定任何环境下都能注册到 1.加了环境标识的bean只有环境激活的时候才能注册到容器中 ...