当前位置: 技术问答>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,然后分别对返回的描述集进行判断,
这样的模式效率会高吗?会不会存在什么问题啊?还望懂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等待事件到来,处理描述符,分任务给其他线程),其他线程只做事
一般思路是主线程处理并维护描述符集合(epoll_wait等待事件到来,处理描述符,分任务给其他线程),其他线程只做事
|
one event per thread就是这样。
楼主可以学习一下领导者追随者, 半同步半异步, 都是典型的多线程reactor模型,用epoll的EPOLLONESHOT选项可以轻松实现。
楼主可以学习一下领导者追随者, 半同步半异步, 都是典型的多线程reactor模型,用epoll的EPOLLONESHOT选项可以轻松实现。
|
这个没有用过这种模型不太清楚,另外感觉每个线程都while循环,不如就一个while、有任务时再唤醒空闲线程
|
可以有一个事件产生线程,然后多个事件处理线程,协调好它们之间的同步关系就没啥问题了
|
mark一个,最近也在学epoll,与楼主共勉~~
不过对于楼主的问题,好像一般都这么做的吧。。
不过对于楼主的问题,好像一般都这么做的吧。。