3.1.4 I/O多路复用
来源:互联网 发布:simulink 知乎 标定 编辑:程序博客网 时间:2024/05/16 03:07
I/O多路复用技术可以避免当要处理多个文件描述符时,长时间阻塞在某个文件描述符,使其他描述符得不到处理的情况。多进程、非阻塞(轮询)、异步I/O技术都可用来处理该问题,I/O多路复用是其中效果较好的。
select系统调用是经典的I/O多路复用模型,函数原型如下:
intselect(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,structtimeval *timeout);
maxfdp表示最大fd数加1。
readfds、writefds、errorfds分别表示读、写、出错描述符集。有一组宏可以对fd_set进行操作:
FD_ZERO宏可以重置描述符集。
FD_SET宏可以将某个fd置入特定的描述符集合中。
FD_ISSET宏可以判断某个fd是否在某描述符集合中。
timeout表示等待时间,为NULL表示永远等待,直到有准备好的描述符或收到信号;为0表示不等待;如果指定了等待时间,则当捕获到描述符或等待时间到时返回。由于postfix的定时事件和I/O事件都放在event_loop中执行,所以要谨慎设置该参数。
select多路复用模型的并发数受FD_SETSIZE限制,同时期执行方式为循环fd_set集合,效率较低。各个类Unix系统上都实现了各自的高效I/O多路复用模型,postfix和其他服务器软件一样,可根据所在的系统选择合适的多路复用模型:
/util/sys_defs.h
1387 #defineEVENTS_STYLE_SELECT 1 /* Traditional BSD select */
1388 #defineEVENTS_STYLE_KQUEUE 2 /* FreeBSD kqueue */
1389 #defineEVENTS_STYLE_DEVPOLL 3 /* Solaris /dev/poll */
1390 #defineEVENTS_STYLE_EPOLL 4 /* Linux epoll */
- 3.1.4 I/O多路复用
- I/O多路复用
- 多路复用I/O
- I/O多路复用详解
- i/o多路复用例子
- I/O多路复用
- i/o多路复用
- I/O多路复用
- i/o多路复用
- I/O多路复用详解
- I/O多路复用
- poll() | 多路复用 I/O
- I/O多路复用
- I/O多路复用
- poll() | 多路复用 I/O
- I/O多路复用
- 多路复用I/O
- I/O多路复用select
- CSS hack
- iOS KVC 键值编码
- C++实验三-个人所得税计算器
- 第六周 项目二 带武器的游戏角色
- iOS 抓包总结
- 3.1.4 I/O多路复用
- c++实验3-1个人所得税
- 《深入理解Java虚拟机》笔记
- 那些年,追过的开源软件和技术
- 窗体间传值的几种方法
- 作为一个程序员的我的一点感受
- PHP sprintf() 函数
- oracle序列详解
- MySQL数据库的基本操作