linux平台下多线程网络库开发

一尺丈量 2017-03-06 04:11:32
现在正在学习性地写一个linux平台下的高性能并发网络库,采用多线程模式。现在希望我编写的这个库能够支持以下这种模式:一个主线程,这个线程做的事件是在一个loop中接收连接(即accept);多个子线程,这些线程关注主线程中已经连接的socket的读与写事件,但不accept。也就是说主线程accept后,将accept返回 的文件描述符交给子线程,主线程继续进行accept;然后子线程负责这个socket的交互。现在的一个问题是,主线程accept后,如何将这个socket的fd将到子线程去,并且子线程做到立刻对这个fd的读写事件进行关注(使用poll或者epoll),当子线程正在等待poll返回时,那个这个fd就无法加入到正在poll的描述符中,那么就可能造成处理不及时,这要怎么解决呢?
...全文
977 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
参考muduo源码,one loop per thread,也叫reactor + 线程池。 主线程接收客户端连接请求后,从所有子线程的事件循环中选择一个,添加进去。至于epoll_wait阻塞的时候怎么添加,可以先将epoll_wait激活返回,具体可以使用eventfd。
小竹z 2017-11-12
  • 打赏
  • 举报
回复
linux高性能并发库,首选epoll,楼主可以不用研究poll模式了。多线程调用epoll_wait来处理事件
yes-hyh 2017-03-06
  • 打赏
  • 举报
回复
一个线程一个epoll。主线程接受了一个连接,将这个fd直接add到对应线程的epoll中即可。epoll的相关操作函数是线程安全的、

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧