如果在epoll_wait 之后的处理中阻塞了
最近在学linux下的c编程
在网络编程的异步处理中用到epoll,网上各种教程都是讲的echo server的例子。
while(1){ nfds=epoll_wait(epfd,events,20,1000); for(i=0; i<nfds; i++){ /* 各种判断,各种处理 */ if(读事件){ 读出一堆数据; 处理请求; } } }我想问的是,如果处理请求的时间特别长,怎么办。
比如在“处理请求”前面加一句“sleep(60)”。
不知道我描述清楚了没有,这种情况怎么解决。
我能想到的是,把请求封装一下,丢到一个队列里,另外的处理线程来处理这些请求。
不知道更一般的策略是什么样的。
我想知道nginx碰到耗时的请求的怎么处理的,看源码看的眼花缭乱,跳来跳去的,希望了解的人热情回答一下。谢谢了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
处理结果如何返回了?
楼上说的没错,一般epoll只用来接受事情请求,具体的处理让具体的线程来做
博客上面讲的很好,主要提的是线程池的处理方法。最后也提到了任务队列的问题。
你的思路是对的,一般的策略是单epoll线程处理建立连接、分配给若干个epoll线程响应新请求,再丢给一个或多个线程池实际处理,建议参考陈硕的博客文章学习,讲得比较透彻。当然怎么用C做线程池是另外的知识了。
http://blog.csdn.net/solstice/article/details/6548228