当前位置:  技术问答>linux和unix

epoll+多线程的疑问

    来源: 互联网  发布时间:2017-04-14

    本文导语:  最近在网上看到一个epoll+多线程的例子, 大概的代码描述如下: main函数里面,依次调用epoll_create、socket、bind、listen、epoll_ctl后, 用pthread_create生成N个线程, 线程函数workerThread的描述如下: 在一个while(1)中调用epoll_...

最近在网上看到一个epoll+多线程的例子,
大概的代码描述如下:
main函数里面,依次调用epoll_create、socket、bind、listen、epoll_ctl后,
用pthread_create生成N个线程,
线程函数workerThread的描述如下:
在一个while(1)中调用epoll_wait,然后分别对返回的描述集进行判断,

if (event.data.fd == lisSock) 
{
    ......
    int sock = accept(lisSock, NULL, NULL);
    ......
}
else
{
   if (event.events & EPOLLIN) 
   {
     ......
   }
   
   if (event.events & EPOLLOUT) 
   {
     ......
   }
}


这样的模式效率会高吗?会不会存在什么问题啊?还望懂epoll的高手来分析分析。

|
按LZ的意思是每一个线程都有一个while (1)和epoll_wait吗?这样效率高不上去吧

一般思路是主线程处理并维护描述符集合(epoll_wait等待事件到来,处理描述符,分任务给其他线程),其他线程只做事

|
one event per thread就是这样。

楼主可以学习一下领导者追随者, 半同步半异步, 都是典型的多线程reactor模型,用epoll的EPOLLONESHOT选项可以轻松实现。

|
这个没有用过这种模型不太清楚,另外感觉每个线程都while循环,不如就一个while、有任务时再唤醒空闲线程

|
可以有一个事件产生线程,然后多个事件处理线程,协调好它们之间的同步关系就没啥问题了

|
mark一个,最近也在学epoll,与楼主共勉~~
不过对于楼主的问题,好像一般都这么做的吧。。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • epoll中epoll_event结构体的含义
  • epoll_ctl(,EPOLL_CTL_DEL,); 的问题!!!
  • 第一次用epoll就傻眼,程序报create_epoll error Function not implemented
  • 为Qt添加epoll的高性能I/O复用 qt_eventdispatcher_epoll
  • 请问: 当服务器采用epoll 时,客户端连不上,但若服务器端不用epoll时,也连上并发消息,这是为什么啊
  • epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event)为何老返回-1
  • linux和unix iis7站长之家
  • 大家好,问个问题,关于EPOLL的。。。
  • epoll并发问题
  • 有人碰到过epoll丢信号吗
  • epoll异常问题
  • epoll模型如何限制最大连接数
  • epoll可读的问题
  • python实现Linux异步epoll代码
  • epoll多路复用模型的疑惑,请高手解答
  • epoll,socket超时如何设置?
  • epoll的一个问题
  • 关于epoll的链接库
  • 谁能解释一下epoll、libevent、zeroMQ的区别?
  • epoll 丢事件


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,