社区
Linux/Unix社区
帖子详情
求你一个多线程同时epoll_wait的实例。
飞翔的薄荷
2013-04-19 10:48:16
总觉得有很多无法解决的问题,比如:
1、想read时调用epoll_ctl时无法确定是否需要EPOLLOUT。想write时调用epoll_ctl时无法确定是否需要EPOLLIN。
2、一个线程epoll_wait返回后,还没来得及调用read或write函数,另一个线程调用epoll_ctl,导致第三个线程的epoll_wait返回。
最难的是第二个问题。
...全文
865
7
打赏
收藏
求你一个多线程同时epoll_wait的实例。
总觉得有很多无法解决的问题,比如: 1、想read时调用epoll_ctl时无法确定是否需要EPOLLOUT。想write时调用epoll_ctl时无法确定是否需要EPOLLIN。 2、一个线程epoll_wait返回后,还没来得及调用read或write函数,另一个线程调用epoll_ctl,导致第三个线程的epoll_wait返回。 最难的是第二个问题。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rem2002
2014-03-06
打赏
举报
回复
我也在纠结这个问题啊, 不是 读,就是写,这不等于是单工的了,我刚开始以为 epoll_ctl 可以对同一fd 注册读、写两事件,测试时不能,期望交流。
飞翔的薄荷
2013-04-24
打赏
举报
回复
为什么要多个线程操作epoll?一个线程收发包,其他线程负责处理逻辑不好吗: 我的代码要在windows和linux下都能跑,因此希望两种逻辑结构都差不多。windows下就是多个线程同时等待一个完成端口。 就问题本身而言,多线程操作同一个对象,还是加锁或者用队列更安全。 不能加锁,加锁后相当于一个线程。 搞定了没?可以探讨一下。 因为其它项目,这个项目挂起了。
tommwq
2013-04-21
打赏
举报
回复
为什么要多个线程操作epoll?一个线程收发包,其他线程负责处理逻辑不好吗? 就问题本身而言,多线程操作同一个对象,还是加锁或者用队列更安全。
heartlesstoanyone
2013-04-21
打赏
举报
回复
搞定了没?可以探讨一下。
飞翔的薄荷
2013-04-19
打赏
举报
回复
写错了,write应该是recv。
飞翔的薄荷
2013-04-19
打赏
举报
回复
我知道用EPOLLONESHOT清理掉,但是另一个线程使用epoll_ctl后,又被加上了。 比如我想处理一个write事件,需要加入EPOLLIN,一个线程epoll_wait返回,但还没来得及处理我的代码(也就是我还不知道要清理掉EPOLLIN)。另一个线程请求一个send,需要加入EPOLLOUT,此时调用epoll_ctl看到EPOLLIN还没有处理,所有epoll_ctl使用EPOLLIN|EPOLLOUT。然后悲剧了,有两个线程同时处理EPOLLIN。
qq120848369
2013-04-19
打赏
举报
回复
1,根本不是问题,这只能说明你不会设计代码。 2,了解EPOLLONESHOT选项,可以帮助你多线程共享同一个epoll set的原子性,从模式来说这叫做leader-follower模型。
linux
epoll
程序
实例
,【
求
你
一个
多线程
同时
epoll
wait
的
实例
】
求
你
一个
多线程
同时
epoll
_
wait
的
实例
。如果目标线程是其他线程,send消息后直接返回,之后本线程应该用getmessage来响应其他线程post回来的send处理完毕的通知,该通知的处理函数会调用注册的回调。你的这个问题应该是线程函数中调用w2a导致,如果m_vecpath这个容器很大的话,w2a在频繁调用的时候会出现问题,导致的栈内存耗尽,所以保险的方式是用在频繁调用时用{}把w2a包起...
多线程
调用
epoll
_
wait
()的线程安全问题分析
多线程
epoll
_
wait
后得到的活跃fd是线程安全的吗? 或者说多个线程在
epoll
_
wait
后,各个线程得到的
epoll
_event[]里的socket有相同的吗? 有可能各个线程得到的
epoll
_event[]里的socket有相同的。特别在LT模式下。虽然内核使用了排他锁每次只唤醒
一个
epoll
_
wait
()进程,但如果在LT模式下,而且唤醒的进程没有处理完该fd的全部
epoll
_
wait
详解
epoll
_p
wait
,等待
epoll
文件描述符上的I / O事件。 #include <sys /
epoll
.h> int
epoll
_
wait
(int epfd,struct
epoll
_event * events,int maxevents,int timeout);
epoll
_
wait
()系统调用等待文件描述符epfd引用的
epoll
实例
上的事件。事件所指向的存储区域将包含可供调用者使用的事件。
epoll
_
wait
()最多返回最大事件。 maxevents...
多线程
是每个线程持有
Epoll
实例
还是所有线程共有
Epoll
实例
在线程池的情况下,单
epoll
架构下很难高效地解决惊群效应问题,而多
epoll
架构下可以通过
EPOLL
EXCLUSIVE标志来有效地避免惊群效应。因此,在设计高性能的网络服务器时,建议采用多
epoll
架构,并使用
EPOLL
EXCLUSIVE标志来注册事件,以提高系统的整体性能和响应速度。
epoll
+线程池实现高并发
epoll
模型是linux实现高并发的一种方法,基于事件驱动模型,相比于select/poll 模型具有更高的效率,本人对
epoll
模型做了
一个
简易的封装,更多的功能还在完善中,在这里仅做学习参考用。 在
epoll
编程中,有三个非常重要的函数: 1. int
epoll
_create(int size) :创建
epoll
句柄, 入参是表示监听的数...
Linux/Unix社区
23,224
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章