首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数 ...
分类:
其他好文 时间:
2016-05-11 13:31:20
阅读次数:
107
多路复用I/O: socket编程之select(),poll(),epoll() 代码: client.c server.c 结果: ...
分类:
其他好文 时间:
2016-05-09 22:09:19
阅读次数:
298
一个简单的epoll demo ,同时接受多个客户端连接,并把接收到的字符串转化为大写字母返回给客户端 ...
分类:
系统相关 时间:
2016-05-08 16:39:24
阅读次数:
256
socket编程,通信 client端 socket() >connect() >recv() > close(); server端 socket() >bind() > listen() >accept() >send() >close(); 1> socket(int family,int ty ...
分类:
其他好文 时间:
2016-05-08 01:09:49
阅读次数:
300
socket编程,通信 client端 socket() >connect() >recv() > close(); server端 socket() >bind() > listen() >accept() >send() >close(); 1> socket(int family,int ty ...
分类:
其他好文 时间:
2016-05-08 01:08:13
阅读次数:
161
五、事件处理框架
libevent的事件处理框架是一个反应堆模型,而反应堆模型的核心就是IO复用。拿epoll来说,反应堆模型有两个核心数据结构,一个是epoll维护的内核事件表,一个是保存激活事件的事件队列。当然,值的注意的是,如果是单线程或者单进程,反应堆模型一定是IO复用+异步IO,否则无法保证及时响应。下面,将分析事件注册和事件删除的具体细节。
1.event_base...
分类:
其他好文 时间:
2016-05-06 16:03:06
阅读次数:
207
二、epoll与select、poll区别
1、相比于select与poll,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。内核中的select与poll的实现是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。
2、epoll的实现是基于回调的,如果fd有期望的事件发生就通过回调函数将其加入epoll就绪队列中,也就是说它只关心“活跃”的fd,与fd数目无关。...
分类:
其他好文 时间:
2016-05-06 12:49:10
阅读次数:
199
惊群问题
惊群问题是由于系统中有多个进程在等待同一个资源,当资源可用的时候,系统会唤醒所有或部分处于休眠状态的进程去争抢资源,但是最终只会有一个进程能够成功的响应请求并获得资源,但在这个过程中由于系统要对全部的进程唤醒,导致了需要对这些进程进行不必要的切换,从而会产生系统资源的浪费。
这种情况一般是accept或epoll_create在子进程中处于监听状态,也就是先创建子进程或者子线程...
分类:
其他好文 时间:
2016-05-06 12:31:32
阅读次数:
297
一、IO多路复用所谓IO多路复用,就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。Linux支持IO多路复用的系统调用有select、poll、epoll,这些调用都是内核级别的。但select、poll、epoll本质上都是同步I/O,先是block住等待就绪的socket,再是block住将数据从内核拷贝到用户内存。当然...
分类:
其他好文 时间:
2016-05-06 08:13:59
阅读次数:
290
为什么Nginx的性能要比Apache高很多? 这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。 目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网 ...
分类:
Web程序 时间:
2016-05-05 21:57:39
阅读次数:
207