如果在epoll_wait 之后的处理中阻塞了

发布于 2021-11-21 08:30:03 字数 576 浏览 873 评论 4

最近在学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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

沙与沫 2021-11-24 04:47:10

处理结果如何返回了?

自此以后,行同陌路 2021-11-24 01:11:22

楼上说的没错,一般epoll只用来接受事情请求,具体的处理让具体的线程来做

傾城如夢未必闌珊 2021-11-24 00:53:18

博客上面讲的很好,主要提的是线程池的处理方法。最后也提到了任务队列的问题。

拍不死你 2021-11-22 13:20:51

你的思路是对的,一般的策略是单epoll线程处理建立连接、分配给若干个epoll线程响应新请求,再丢给一个或多个线程池实际处理,建议参考陈硕的博客文章学习,讲得比较透彻。当然怎么用C做线程池是另外的知识了。

http://blog.csdn.net/solstice/article/details/6548228

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文