reactor

①主线程往epoll内核事件表中注册socket上有数据可读

②主线程调用epoll_wait等待socket上有数据可读

③当socket上有数据可读时,epoll_wait通知主线程。主线程则将socket可读事件放入请求队列

④睡眠在请求请求队列上的某个工作线程被唤醒,它从socket读取数据,并处理客户请求,然后往epoll内核事件表中注册该socket上的写就绪时间

⑤主线程调用epoll_wait等到socket可写

⑥当socket可写时,epoll_wait通知主线程。主线程将socket可写事件放入请求队列

⑦睡眠在请求队列上的某个工作线程被唤醒,它向socket上写入服务器处理客户请求的结果

 

 

同步模拟proactor

主线程往epoll内核事件表中注册socket上的读就绪事件

②主线程调用epoll_wait等待socket上有数据可读

③当socket上有数据可读时,epoll_wait通知主线程。主线程从socket循环读取数据,直到没有更多数据可读,然后将读取到的数据封装成一个请求对象并插入请求队列

④睡眠在请求队列上的某个工作线程被唤醒,它获得请求对象并处理客户请求,然后往epoll内核事件表中注册socket上的写就绪事件

⑤主线程调用epoll_wait等到socket可写

⑥当socket可写时,epoll_wait通知主线程。主线程往socket上写入服务器处理客户请求的结果

 

两者注意到io相关: reactor io操作由工作线程完成, 同步模拟的proactor由主线程完成

posted on 2025-04-28 11:12  towboat  阅读(12)  评论(0)    收藏  举报