开发者社区> 问答> 正文

如果在epoll_wait 之后的处理中阻塞了? 400 报错

如果在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碰到耗时的请求的怎么处理的,看源码看的眼花缭乱,跳来跳去的,希望了解的人热情回答一下。谢谢了。

展开
收起
爱吃鱼的程序员 2020-06-04 13:21:15 644 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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

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

    ######博客上面讲的很好,主要提的是线程池的处理方法。最后也提到了任务队列的问题。######楼上说的没错,一般epoll只用来接受事情请求,具体的处理让具体的线程来做######处理结果如何返回了?
    2020-06-04 16:50:06
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载