Linu epoll 三种模式
来源:互联网 发布:js提示框美化 编辑:程序博客网 时间:2024/06/07 05:11
IO操作方式
阻塞等待
好处:不占用CPU宝贵的时间片
缺点:同一时刻只能处理一个操作,效率低
{多线程或多进程}
非阻塞,忙轮询
好处:提高了程序的执行效率
缺点:需要占用更多的CPU和系统资源
解决方案:
1.select(最高链接1024个文件描述)/poll(数组无限制)
只会提示有几个客户端链接, 需要服务器遍历找出是哪些?
2.epoll
不止提示有几个客户端链接, 还会提供是哪些链接信息
I/O多路转接技术
1.先构造一张有关文件描述符的列表,将要监听的文件描述符添加到该文件
2.然后调用一个函数,监听该表中的文件描述符,直到这些描述符表中的一个进行I/O操作时,该函数才返回。
该函数为阻塞函数
函数对文件描述符的检测操作是由内核完成的
阻塞等待
好处:不占用CPU宝贵的时间片
缺点:同一时刻只能处理一个操作,效率低
{多线程或多进程}
非阻塞,忙轮询
好处:提高了程序的执行效率
缺点:需要占用更多的CPU和系统资源
解决方案:
1.select(最高链接1024个文件描述)/poll(数组无限制)
只会提示有几个客户端链接, 需要服务器遍历找出是哪些?
2.epoll
不止提示有几个客户端链接, 还会提供是哪些链接信息
I/O多路转接技术
1.先构造一张有关文件描述符的列表,将要监听的文件描述符添加到该文件
2.然后调用一个函数,监听该表中的文件描述符,直到这些描述符表中的一个进行I/O操作时,该函数才返回。
该函数为阻塞函数
函数对文件描述符的检测操作是由内核完成的
3.在返回时,它告诉进程有多少(哪些)描述符要进行I/O操作。
1.水平触发模式-根据读来解释
只要fd对应的缓冲区有数据
epoll_wait返回
返回的次数与发送数据的次数没有关系
epoll默认的工作模式
2.边沿触发模式-ET
fd - 默认阻塞属性
客户端给server发送数据
发一次数据 server 的 epoll_wait返回一次
不在乎数据是否读完
如果读不完,如何全部读出来?
while(recv())
数据读完之后recv会阻塞
解决阻塞问题
设置非阻塞 - fd
3. 边沿非阻塞触发
效率最高
如何设置非阻塞
1.open()
设置flags
必须 O_WDRW | O_NONBLOCK
终端文件: /dev/tty
2.fcntl
int flag = fcntl(fd, F_GETFL);
flag |= O_NONBLOCK;
fcntl(fd, F_SETFL, flag);
将缓冲区的全部数据都读出
while(recv() > 0)
{
printf():
}
当缓冲区数据读完之后 , 返回为0
阅读全文
0 0
- Linu epoll 三种模式
- LINUX网络编程(fork、select、epoll三种模式)
- LINUX网络编程(fork、select、epoll三种模式)
- EPOLL两种模式
- epoll详解(三)-- ET模式实例
- Linu学习总结(三)
- EPOLL两种模式详解
- epoll两种监听模式
- EPOLL两种模式详解
- epoll的两种模式
- 通过进入单用户模式解决linu…
- epoll的两种触发模式
- epoll的两种工作模式
- epoll的两种模式详解
- epoll的两种触发模式
- epoll两种触发模式的区别
- epoll 三个方法 两种工作模式
- epoll的两种触发模式
- KNIME学习记录
- 【传递闭包+bitset优化】BZOJ2208 [Jsoi2010]连通数
- spring boot零基础学习 spring boot简介(一)
- 【备战秋招Day 2】经典面试题5-8及在线编程题4-6答案
- Opencv3 python学习3——绘图基础
- Linu epoll 三种模式
- HTML入门笔记11-blockquote和q标签
- leetcode46简单动态规划
- 正则表达式
- Win7系统Visual Studio 2013配置OpenCV3.1图文详解
- git学习笔记(一)
- C/C++动态内存分配
- Mac Terminal 终端 快捷键
- Matplotlib的使用