epoll+多线程的疑问

jody_go 2013-05-30 08:57:25
最近在网上看到一个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的高手来分析分析。
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
prohibit 2013-06-03
  • 打赏
  • 举报
回复
引用 6 楼 jody_go 的回复:
[quote=引用 1 楼 prohibit 的回复:] 按LZ的意思是每一个线程都有一个while (1)和epoll_wait吗?这样效率高不上去吧 一般思路是主线程处理并维护描述符集合(epoll_wait等待事件到来,处理描述符,分任务给其他线程),其他线程只做事
每个线程一个while (1)和epoll_wait,我感觉也是很低效的,但又不晓得哪里不好。 如果来一个可读事件,那么epoll_wait是不是会有惊群现象啊? [/quote]这个没有用过这种模型不太清楚,另外感觉每个线程都while循环,不如就一个while、有任务时再唤醒空闲线程
jody_go 2013-06-03
  • 打赏
  • 举报
回复
引用 1 楼 prohibit 的回复:
按LZ的意思是每一个线程都有一个while (1)和epoll_wait吗?这样效率高不上去吧 一般思路是主线程处理并维护描述符集合(epoll_wait等待事件到来,处理描述符,分任务给其他线程),其他线程只做事
每个线程一个while (1)和epoll_wait,我感觉也是很低效的,但又不晓得哪里不好。 如果来一个可读事件,那么epoll_wait是不是会有惊群现象啊?
qq453146281 2013-06-02
  • 打赏
  • 举报
回复
mark一个,最近也在学epoll,与楼主共勉~~ 不过对于楼主的问题,好像一般都这么做的吧。。
qq120848369 2013-06-01
  • 打赏
  • 举报
回复
one event per thread就是这样。 楼主可以学习一下领导者追随者, 半同步半异步, 都是典型的多线程reactor模型,用epoll的EPOLLONESHOT选项可以轻松实现。
空的 2013-05-31
  • 打赏
  • 举报
回复
我看过的都这样的,不知道有啥隐患~~
prohibit 2013-05-31
  • 打赏
  • 举报
回复
按LZ的意思是每一个线程都有一个while (1)和epoll_wait吗?这样效率高不上去吧 一般思路是主线程处理并维护描述符集合(epoll_wait等待事件到来,处理描述符,分任务给其他线程),其他线程只做事
heartlesstoanyone 2013-05-31
  • 打赏
  • 举报
回复
可以有一个事件产生线程,然后多个事件处理线程,协调好它们之间的同步关系就没啥问题了

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧