社区
Linux/Unix社区
帖子详情
如果多个线程同时select同一个套接字会怎么样?可以这样吗?
wd_6532
2005-02-18 04:52:07
两个cpu
两个线程并行执行select,等待相同的100个socket,可以吗,会有什么问题?
...全文
525
10
打赏
收藏
如果多个线程同时select同一个套接字会怎么样?可以这样吗?
两个cpu 两个线程并行执行select,等待相同的100个socket,可以吗,会有什么问题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
我不懂电脑
2005-02-24
打赏
举报
回复
只要互斥处理好了,应该没什么问题。
tengulre
2005-02-23
打赏
举报
回复
同意楼上.
gaoxianfeng
2005-02-23
打赏
举报
回复
领导说要多个线程recv,send.不可违
??
一般是多个线程处理多组不同的 fd
然后把数据线程内预处理
需要交互的再集中处理
wd_6532
2005-02-21
打赏
举报
回复
to zeusnchen:
我不是用阻塞方式.
我用的poll或者select的非阻塞模型,有数据才会调用recv函数,没有数据就在poll或者select函数上等待
zeusnchen
2005-02-21
打赏
举报
回复
sorry,偶以为你用的阻塞方式
那样的话,也会有问题三
你没法控制哪个thread收哪些数据了
当然要看你的目的了
呵呵
zeusnchen
2005-02-20
打赏
举报
回复
》我觉得只要不是几十个cpu,单个线程poll之后recv 和 多个线程poll recv是一样的,
》因为recv不会阻塞,仅仅是一个内存拷贝。
当然会阻塞,你第一次recv后就把接收缓冲里的东西可能收完了
下次再recv就要阻塞了
wd_6532
2005-02-20
打赏
举报
回复
领导说要多个线程recv,send.不可违。
我觉得只要不是几十个cpu,单个线程poll之后recv 和 多个线程poll recv是一样的,
因为recv不会阻塞,仅仅是一个内存拷贝。
看来只好用两个线程分别处理不同的socket组了。
至于send,就同步一下,每次send前,先锁一下这个socket对应的互斥锁。
ringerxyz
2005-02-19
打赏
举报
回复
楼上说的有道理,还有select可以在100个socket上执行吗?好像有最大限制的
zeusnchen
2005-02-18
打赏
举报
回复
只要socket的事件没有消失,select就会成功,所以你的各个线程要处理这个race condition
例如,socket a 有read事件,线程1select返回后,在调用处理这个read事件前,线程2可能
也会在a上select,它同样会得到read事件,如果它也去处理,就产生了race condition,
先处理read事件的线程pass,后面一个可能就会组塞了
不明白你为什么用多个线程去select同一堆socket?
或许应该让不同的线程负责不同的sockets,避免这种race condition?
tukey
2005-02-18
打赏
举报
回复
up
大名⿍⿍的
select
:看我如何同时感知
多个
I-O事件
本讲聚焦高并发高性能网络服务器程序设计,介绍I/O多路复用。
select
函数是常见的I/O多路复用技术,可让程序同时处理
多个
I/O事件。文中讲解了
select
函数的使用方法、给出程序例子,还说明了
套接字
描述符就绪条件,最后强调使用
select
的两个要点。
Socket.
Select
()函数使用不当引发的问题(关于
套接字
在
线程
间传递是否可行的验证)
在VS2010 C#环境下,使用Socket.
Select
()函数进行多
线程
编程时遇到问题。监听
线程
创建并管理
套接字
,接收
线程
从
套接字
集中读取消息。由于Socket.Connected属性误用和
Select
()参数设置,导致无法接收消息。解决方案是修正
Select
()的超时参数,同时优化
线程
同步以降低CPU使用率。
套接字
select
模型
本文深入解析了
Select
模型的工作原理及其实现细节,包括如何利用
Select
函数判断
套接字
的状态,避免阻塞状态的发生,并通过示例代码展示了服务器端的实现过程。
winsock-
select
模型总结
本文深入探讨了Winsock
Select
模型的工作原理,通过对比阻塞和非阻塞
套接字
,阐述了
Select
模型如何允许
线程
同时监测
多个
套接字
的I/O操作。并提供了Server端和Client端的实现代码,展示了
Select
模型在实际网络编程中的应用。
select
函数的使用,TCP服务端管理
多个
客户端
本文展示了一个最小Demo,介绍TCP服务端与
多个
客户端交互的实现。服务端管理
多个
套接字
可采用新
线程
或IO多路复用手段,这里使用
select
函数。新
线程
负责接受新连接,主
线程
检测
套接字
是否可用,通过
select
和FD_ISSET函数处理。还给出了服务端和客户端的完整代码。
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章