linux网络编程 epoll水平触发、边沿触发、反应堆模型、线程池思想
打开文件上限的设置可修改配置文件: etc/security/limits.conf
水平、边沿触发:
若客户端发送1000B数据,服务器一次只读500B。在水平触发的模式下,服务器会再调用一次epoll_wait将剩余的数据读取。而在边沿触发模式下,服务器只会调用第一次epoll_wait,读取第一次的500B数据,剩余的数据会保留在sock可读缓存区内。
- 边沿触发:对同一次事件的epoll_wait,即使事件没处理干净,也只会有一次返回值
- 水平触发:对同一次时间的epoll_wait,即使事件没处理干净,下一次epoll_wait也会有返回值
- 水平触发的设置:event.events=EPOLLIN (默认)
- 边沿触发的设置:event.events=EPOLLIN|EPOLLET
反应堆模型:
- 监听可读事件(ET) ⇒ 数据到来 ⇒ 触发事件 ⇒ epoll_wait()返回 ⇒读取完数据(可读事件回调函数内) ⇒ 将该节点从红黑树上摘下(可读事件回调函数内) ⇒ 设置可写事件和对应可写回调函数(可读事件回调函数内) ⇒ 挂上树(可读事件回调函数内) ⇒ 处理数据(可读事件回调函数内)⇒ 监听可写事件(ET) ⇒ 对方可读 ⇒ 触发事件 ⇒ epoll_wait()返回 ⇒写完数据(可写事件回调函数内) ⇒ 将该节点从红黑树上摘下(可写事件回调函数内) ⇒ 设置可读事件和对应可读回调函数(可写读事件回调函数内) ⇒ 挂上树(可写事件回调函数内) ⇒ 处理收尾工作(可写事件回调函数内) ⇒ 直到程序停止前一直这么交替循环
- 至此,结束
线程池:
- 线程池就是有一堆已经创建好了的线程,初始它们都处于空闲等待状态,当有新的任务需要处理的时候,就从这个池子里面取一个空闲等待的线程来处理该任务,当处理完成了就再次把该线程放回池中,以供后面的任务使用。当池子里的线程全都处理忙碌状态时,线程池中没有可用的空闲等待线程,此时,根据需要选择创建一个新的线程并置入池中,或者通知任务线程池忙,稍后再试。这种方式避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。
组成部分
- 线程管理者
- 等待任务的线程
- 任务队列
linux网络编程 epoll水平触发、边沿触发、反应堆模型、线程池思想相关推荐
- 【Linux网络编程】并发服务器之select模型
00. 目录 文章目录 00. 目录 01. 概述 02. I/O复用技术概述 03. select模型服务器实现思路 04. select模型服务器实现 05. 附录 01. 概述 服务器设计技术有 ...
- 【Linux网络编程】并发服务器之多线程模型
00. 目录 文章目录 00. 目录 01. 概述 02. 多线程服务器 03. 多线程服务器实现思路 04. 多线程服务器实现 05. 附录 01. 概述 服务器设计技术有很多,按使用的协议来分有 ...
- 【Linux网络编程】并发服务器之多进程模型
00. 目录 文章目录 00. 目录 01. 概述 02. 多进程并发服务器 03. 多进程并发服务器实现思路 04. 多进程并发服务器实现 05. 附录 01. 概述 服务器设计技术有很多,按使用的 ...
- 【Linux网络编程】循环服务器之TCP模型
00. 目录 文章目录 00. 目录 01. 概述 02. TCP循环服务器实现方法 03. TCP循环服务器模型 04. TCP循环服务器实现 05. 附录 01. 概述 服务器设计技术有很多,按使 ...
- linux线程同步 epoll,Linux网络编程--epoll 模型原理详解以及实例
1.简介 Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数.Linux 2.6内核中有提高网络I/O性能的新方法,即epoll . epoll是什么?按 ...
- 【Linux网络编程部分----多进程高并发poll模型】
目录 前言 背景 分析 编写步骤 服务器: 客户端: 服务器端代码 附:文件操作部分 附:目录操作部分 客户端代码 全部代码 头文件部分 服务器全部代码 客户端所有代码 总结: 前言 本文采用 Vi ...
- linux网络编程之网络应用设计模式、分层模型、通信过程
(1)网络协议 可以理解为规则,其中包含着数据传输和数据的解释. 典型的协议:传输层:tcp/udp协议,应用层:http/ftp协议,网络层:ip协议,网路接口:arp协议 (2)网络应用设计模式 ...
- 【Linux】一步一步学Linux网络编程教程汇总(更新中......)
00. 目录 文章目录 00. 目录 01. 基础理论知识 02. 初级编程 03. 高级编程 04. LibEvent库 05. 06. 07. 01. 基础理论知识 [Linux网络编程]网络协议 ...
- Linux网络编程---I/O复用模型之epoll
https://blog.csdn.net/men_wen/article/details/53456474 Linux网络编程-I/O复用模型之epoll 1. epoll模型简介 epoll是Li ...
最新文章
- 我读过的最好的epoll讲解--转自”知乎“ 【转】
- 关于ARM Cortex系列产品
- C#对Excel的一些操作【一】
- 如何使用自定义端口运行 Flutter Web
- IdentityServer Topics(1)- 启动说明
- SparkSQL之操作Mysql
- EGLSurfaces 和 OpenGL ES
- python 使用 os的 popen(‘命令’) 如果命令行输出中 有中文乱码, 提示 'gbk' 无法解析的错误 解决办法
- Jquery的ajax提交成功后刷新页面
- LeetCode 1816. 截断句子
- “遇事不决,量子力学”?微软亚研院开源时空预测开源工具:FOST,应对各行业共性预测需求!...
- Sharding-Sphere,Sharding-JDBC_介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记001
- 智能优化算法——布谷鸟搜索算法原理(附代码)
- 北京市延庆区谷歌卫星地图下载
- Win10升级后出现的OEM分区处理
- Echarts风向玫瑰图
- 【101】NLP 自然语言处理14种分类算法】
- 记录关于富文本编辑器出现的不能插入图片问题
- 最流行的布局方案 Flex 弹性盒布局详解
- 安卓仿苹果音量调节_Android实现音量调节的方法
热门文章
- typescript使用可选属性报错可能未定义
- php imap 存草稿,学习猿地-PHP-imap 使用参考
- 天敏VC4000视频开发设计方案
- C++ 中谓词是什么?
- workspace\.metadata\.plugins\org.eclipse.wst.server.core
- 耳朵上的艺术品,飞利浦圈铁真无线耳机JT60无敌了!
- 根据下图实现类。在CylinderTest类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的体积,继承性
- 让指定slid值对于的图层可见
- python数据分析的四阶段以及电商数据描述性分析和探索性分析
- Material Design之定制动画--触摸反馈,循环揭露,转场动画,共享元素和曲线运动