[转]阻塞IO与非阻塞IO

https://blog.csdn.net/u010838785/article/details/104455173

https://blog.csdn.net/qq_34638435/article/details/81878301?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

reactor 模式

Reactor 是这样一种模式,他要求主线程(I/O 处理单元,下同)只负责舰艇文件描述符上是否有事件发生,有的话就立即将改时间通知给工作线程。除此之外主线程不做任何其他实质性的工作,读写数据,接受新的连接,以及处理客户请求均在工作线程中完成。
使用同步I/O 模型(以epoll_wait 为例)实现的Reactor 模式的工作流程是:

  • 主线程往epoll 内核时间表中注册socket 上的读就绪事件
  • 主线程调用epoll_wait 等待socket 上有数据可读
  • 当socket 上有数据可读时,epoll_wait 通知主线程。主线程则讲socket可读事件放入到请求队列种
  • 睡眠在请求队列上的某个工作线程被环形,它从socket 读取数据,并处理客户请求,然后往epoll 内科事件表中注册该socket 上的写就绪事件
  • 主线程调用epoll_wait 等待socket 可写
  • 当socket 可写时,epoll_wait 通知主线程。主线程将socket可写书简放入请求队列
  • 睡眠在请求队列上的某个工作线程被环形,它往socket 上写入服务器处理客户请求的结果

在I/O 模型种,“同步”和“异步”区分的是内核向应用程序通知的那种I/O事件。以及该由谁完成I/O读写,在并发模式种,“同步”值得是程序完全按照代码序列的顺序执行,“异步”值得是程序的执行需要由系统的事件来驱动。

posted @ 2021-03-26 20:44  wsl-hitsz  阅读(55)  评论(0编辑  收藏  举报