如果在epoll_wait 之后的处理中阻塞了? 400 报错
最近在学linux下的c编程
在网络编程的异步处理中用到epoll,网上各种教程都是讲的echo server的例子。
while(1){ nfds=epoll_wait(epfd,events,20,1000); for(i=0; i<nfds; i++){ /* 各种判断,各种处理 */ if(读事件){ 读出一堆数据; 处理请求; } } }我想问的是,如果处理请求的时间特别长,怎么办。
比如在“处理请求”前面加一句“sleep(60)”。
不知道我描述清楚了没有,这种情况怎么解决。
我能想到的是,把请求封装一下,丢到一个队列里,另外的处理线程来处理这些请求。
不知道更一般的策略是什么样的。
我想知道nginx碰到耗时的请求的怎么处理的,看源码看的眼花缭乱,跳来跳去的,希望了解的人热情回答一下。谢谢了。
你的思路是对的,一般的策略是单epoll线程处理建立连接、分配给若干个epoll线程响应新请求,再丢给一个或多个线程池实际处理,建议参考陈硕的博客文章学习,讲得比较透彻。当然怎么用C做线程池是另外的知识了。
http://blog.csdn.net/solstice/article/details/6548228
######博客上面讲的很好,主要提的是线程池的处理方法。最后也提到了任务队列的问题。######楼上说的没错,一般epoll只用来接受事情请求,具体的处理让具体的线程来做######处理结果如何返回了?版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。