打开文件上限的设置可修改配置文件: 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水平触发、边沿触发、反应堆模型、线程池思想相关推荐

  1. 【Linux网络编程】并发服务器之select模型

    00. 目录 文章目录 00. 目录 01. 概述 02. I/O复用技术概述 03. select模型服务器实现思路 04. select模型服务器实现 05. 附录 01. 概述 服务器设计技术有 ...

  2. 【Linux网络编程】并发服务器之多线程模型

    00. 目录 文章目录 00. 目录 01. 概述 02. 多线程服务器 03. 多线程服务器实现思路 04. 多线程服务器实现 05. 附录 01. 概述 服务器设计技术有很多,按使用的协议来分有 ...

  3. 【Linux网络编程】并发服务器之多进程模型

    00. 目录 文章目录 00. 目录 01. 概述 02. 多进程并发服务器 03. 多进程并发服务器实现思路 04. 多进程并发服务器实现 05. 附录 01. 概述 服务器设计技术有很多,按使用的 ...

  4. 【Linux网络编程】循环服务器之TCP模型

    00. 目录 文章目录 00. 目录 01. 概述 02. TCP循环服务器实现方法 03. TCP循环服务器模型 04. TCP循环服务器实现 05. 附录 01. 概述 服务器设计技术有很多,按使 ...

  5. linux线程同步 epoll,Linux网络编程--epoll 模型原理详解以及实例

    1.简介 Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数.Linux 2.6内核中有提高网络I/O性能的新方法,即epoll . epoll是什么?按 ...

  6. 【Linux网络编程部分----多进程高并发poll模型】

    目录 前言 背景 分析 编写步骤 服务器: 客户端: 服务器端代码 附:文件操作部分 附:目录操作部分 客户端代码 全部代码 头文件部分 服务器全部代码 客户端所有代码 总结: 前言 本文采用  Vi ...

  7. linux网络编程之网络应用设计模式、分层模型、通信过程

    (1)网络协议 可以理解为规则,其中包含着数据传输和数据的解释. 典型的协议:传输层:tcp/udp协议,应用层:http/ftp协议,网络层:ip协议,网路接口:arp协议 (2)网络应用设计模式 ...

  8. 【Linux】一步一步学Linux网络编程教程汇总(更新中......)

    00. 目录 文章目录 00. 目录 01. 基础理论知识 02. 初级编程 03. 高级编程 04. LibEvent库 05. 06. 07. 01. 基础理论知识 [Linux网络编程]网络协议 ...

  9. Linux网络编程---I/O复用模型之epoll

    https://blog.csdn.net/men_wen/article/details/53456474 Linux网络编程-I/O复用模型之epoll 1. epoll模型简介 epoll是Li ...

最新文章

  1. 我读过的最好的epoll讲解--转自”知乎“ 【转】
  2. 关于ARM Cortex系列产品
  3. C#对Excel的一些操作【一】
  4. 如何使用自定义端口运行 Flutter Web
  5. IdentityServer Topics(1)- 启动说明
  6. SparkSQL之操作Mysql
  7. EGLSurfaces 和 OpenGL ES
  8. python 使用 os的 popen(‘命令’) 如果命令行输出中 有中文乱码, 提示 'gbk' 无法解析的错误 解决办法
  9. Jquery的ajax提交成功后刷新页面
  10. LeetCode 1816. 截断句子
  11. “遇事不决,量子力学”?微软亚研院开源时空预测开源工具:FOST,应对各行业共性预测需求!...
  12. Sharding-Sphere,Sharding-JDBC_介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记001
  13. 智能优化算法——布谷鸟搜索算法原理(附代码)
  14. 北京市延庆区谷歌卫星地图下载
  15. Win10升级后出现的OEM分区处理
  16. Echarts风向玫瑰图
  17. 【101】NLP 自然语言处理14种分类算法】
  18. 记录关于富文本编辑器出现的不能插入图片问题
  19. 最流行的布局方案 Flex 弹性盒布局详解
  20. 安卓仿苹果音量调节_Android实现音量调节的方法

热门文章

  1. typescript使用可选属性报错可能未定义
  2. php imap 存草稿,学习猿地-PHP-imap 使用参考
  3. 天敏VC4000视频开发设计方案
  4. C++ 中谓词是什么?
  5. workspace\.metadata\.plugins\org.eclipse.wst.server.core
  6. 耳朵上的艺术品,飞利浦圈铁真无线耳机JT60无敌了!
  7. 根据下图实现类。在CylinderTest类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的体积,继承性
  8. 让指定slid值对于的图层可见
  9. python数据分析的四阶段以及电商数据描述性分析和探索性分析
  10. Material Design之定制动画--触摸反馈,循环揭露,转场动画,共享元素和曲线运动