上篇线程/进程并发服务器中提到,提高服务器性能在IO层需要关注两个地方,一个是文件描述符处理,一个是线程调度。 IO复用是什么?IO即Input/Output,在网络编程中,文件描述符就是一种IO操作。 为什么要IO复用? 1.网络编程中非常多函数是阻塞的,如connect,利用IO复用可以以非阻塞 ...
分类:
其他好文 时间:
2016-05-13 14:18:19
阅读次数:
1016
I/O复用使得程序能够同时监听多个文件描述符,对于提高程序性能至关重要。I/O复用不仅仅在网络程序中使用,但是我接触到的例子中,TCP网络编程那块使用I/O复用比较多,例如,TCP服务器同时处理监听socket和连接socket.
在了解I/O复用之前,我们需要先了解几个概念。
1,同步I/O与异步I/O
2,LT(水平触发)和ET(边缘触发)
POSIX把两个术语定义如下:
同...
分类:
其他好文 时间:
2016-05-13 03:05:18
阅读次数:
213
一、进程&&线程1.进程模型
(1)单进程模型:一个进程响应多个请求容易造成请求的阻塞
(2)多线程模型:每个进程响应一个请求进程量大,进切换次数过多每个进程地址空间独立,很多空间是重复的数据,所以内存使用率低2.线程模型(thread)LWP:lightWeightProcess在Linux上..
分类:
编程语言 时间:
2016-05-07 16:51:47
阅读次数:
480
五、事件处理框架
libevent的事件处理框架是一个反应堆模型,而反应堆模型的核心就是IO复用。拿epoll来说,反应堆模型有两个核心数据结构,一个是epoll维护的内核事件表,一个是保存激活事件的事件队列。当然,值的注意的是,如果是单线程或者单进程,反应堆模型一定是IO复用+异步IO,否则无法保证及时响应。下面,将分析事件注册和事件删除的具体细节。
1.event_base...
分类:
其他好文 时间:
2016-05-06 16:03:06
阅读次数:
207
有些进程需要一种预先告知内核的能力,使得内核一旦发现进程指定的一个或多个I/O条件就绪(也就是说输入已准备好被读取,或者描述符已能承受更多的输出),他就通知进程,这个能力称为I/O复用1.IO模型5种基本I/O模型阻塞式I/O
非阻塞式I/O
I/O复用(select和poll)
信号驱动式I/O(SIGIO)
异步I/O一个输入操作通常包括两个不同的阶段
(1)等待数据准备
(2)从内核向进程...
分类:
其他好文 时间:
2016-04-29 17:47:32
阅读次数:
110
有些进程需要一种预先告知内核的能力,使得内核一旦发现进程指定的一个或多个I/O条件就绪(也就是说输入已准备好被读取,或者描述符已能承受更多的输出),他就通知进程,这个能力称为I/O复用1.IO模型5种基本I/O模型阻塞式I/O
非阻塞式I/O
I/O复用(select和poll)
信号驱动式I/O(SIGIO)
异步I/O一个输入操作通常包括两个不同的阶段
(1)等待数据准备
(2)从内核向进程...
分类:
其他好文 时间:
2016-04-26 19:50:38
阅读次数:
219
Linux五种IO模型
转载:http://blog.csdn.net/jay900323/article/details/18141217
Linux五种IO模型性能分析
目录(?)[-]
概念理解Linux下的五种IO模型
阻塞IO模型非阻塞IO模型 IO复用模型信号驱动IO异步IO模型个IO模型的比较
selectpollepoll简介
1....
分类:
系统相关 时间:
2016-04-14 01:30:43
阅读次数:
397
1.select第一个参数为最大FD(int)+1,因为虽然select参数里有三个set,但分配到的fd值是不会重复的,当select检查fd可用时(可读或可写或异常),会遍历进程fd表,这时遍历范围为[0,n),所以需要加1 2.IO复用,类似于时分复用, 摘要:
分类:
其他好文 时间:
2016-03-20 19:48:23
阅读次数:
224
背景知识 高效网络编程一般都要依赖于IO复用,IO复用是指同时发送并监听处理很多socket或者文件读写的事件。IO复用的高效方式目前常用的有两种:Reactor和Proactor。这两种方式在操作系统级都是异步和非阻塞的,也就是说用户提交了一个请求后都可以直接返回。但是Reactor在用户层级看来是同步的,就是在提交了一系列的操作给操作系统后,需要阻塞监听等待事件的发生,如果有事...
分类:
编程语言 时间:
2016-03-07 13:57:34
阅读次数:
255
IO复用是Linux中的IO模型之中的一个,IO复用就是进程预先告诉内核须要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理。从而不会在单个IO上堵塞了。Linux中。提供了select、poll、epoll三种接口函数来实现IO复用。 1、select函数 #i