【发布时间】:2019-02-01 02:44:53
【问题描述】:
我看到很多关于 epoll 接受新 fd 并生成新线程以在它自己的线程上读写的争论不能很好地扩展?但它如何不能很好地扩展?如果每个连接都有繁重的处理,例如:-
- 做数据库事务
- 做繁重的算法工作
- 等待其他事情完成。
如果我的目的肯定只是想在程序内部做事(不再花哨的路由到其他连接来做事),并且不要为读/写 io 生成新线程。它可能会因为一个函数在等待某事而永远挂起,对吗?如果是这种情况,如果不产生新线程,epoll 的扩展性如何?
epoll_wait(...);
// available to read now
recv(....);
// From here if i don't spawn thread, the program will be hanging. What should I do?
processing algorithm work.....// At least 3 secs to do the job.
continue;
【问题讨论】:
-
没有任何minimal reproducible example,您的问题看起来太宽泛了。
-
我不确定你是否需要(起初)epoll(7)。但是您肯定需要了解我的回答中提到的概念。