博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高性能服务器程序框架
阅读量:5239 次
发布时间:2019-06-14

本文共 691 字,大约阅读时间需要 2 分钟。

I/O模型:

阻塞I/O:针对阻塞I/O执行的系统调用可能因为无法立即完成而被操作系统挂起,直到等待的事件发生为止。针对非阻塞I/O执行的系统调用总是立即返回,而不管事件是否已经发生,如果事件没有立即发生,这些系统调用返回-1,和出错的情况一样。显然只有在事件已经发生的情况下操作非阻塞I/O才能提高程序的效率,因此,非阻塞I/O通常要和其他I/O通知机制一起使用,比如I/O复用和SIGIO信号

I/O复用:应用程序通过I/O复用函数向内核注册一组事件,内核通过I/O复用函数把其中就绪的事件通知给应用程序,常用的I/O复用函数是select、poll和epoll.I/O复用函数本身是阻塞的,它们能提高程序效率的原因在于它们具有同时监听多个I/O事件的能力。

SIGIO信号:信号触发读写就绪事件,用户程序执行读写操作,程序没有阻塞阶段

以上三种I/O模型都是同步I/O模型,I/O的读写操作,都是在I/O事件发生之后,由应用程序来完成的。异步I/O机制,内核执行读写操作并触发读写完成事件,程序没有阻塞阶段。

两种高效的事件处理模式:

reactor模式:主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程,除此之外,主线程不做任何其他实质性的工作,读写数据、接受新的连接以及处理客户请求均在工作线程中完成。

proactor模式:所有I/O操作都交给主线程和内核来完成,工作线程仅仅负责业务逻辑

 

转载于:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/5363673.html

你可能感兴趣的文章
CentOS
查看>>
Explicit keyword
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
Erdaicms旅游网站程序,微信扫码登录演示和示例程序
查看>>
15第十五章UDF用户自定义函数(转载)
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
Remove '@Override' annotation错误
查看>>
mybatis笔记<一> Demo
查看>>
YUV 格式的视频呈现
查看>>
开通了blog写一些技术blog及感悟
查看>>
Android弹出框的学习
查看>>
349. Intersection of Two Arrays【双指针|二分】
查看>>
extjs gridpanel滚动条问题显示数据不完整
查看>>
springboot(四)设置Redis和Spring的整合
查看>>
mysql提示Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist解决方法...
查看>>
String字符串创建与存储机制
查看>>
现代程序设计 作业1
查看>>
事件和信号量
查看>>