社区
Linux/Unix社区
帖子详情
如果多个线程同时select同一个套接字会怎么样?可以这样吗?
wd_6532
2005-02-18 04:52:07
两个cpu
两个线程并行执行select,等待相同的100个socket,可以吗,会有什么问题?
...全文
470
10
打赏
收藏
如果多个线程同时select同一个套接字会怎么样?可以这样吗?
两个cpu 两个线程并行执行select,等待相同的100个socket,可以吗,会有什么问题?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
同时打开多端口的通信程序
采用Socket通讯协议进行 一个可以同时打开多端口 客户端及服务端通信的 自定义命令解析试验程序。 里面抱含了一个原生数据库ADO操作类,初数sockt及ADO数据库操作者很值得一看。
UNIX网络编程卷1(第三版)源代码
UNIX网络编程卷1:
套接字
联网API(第三版)所有源代码。
套接字
select
模型
一.选择模型
Select
模型原理 利用
select
函数,判断
套接字
上是否存在数据,或者能否向一个
套接字
写入数据。目的是防止应用程序在
套接字
处于锁定模式时,调用recv(或send)从没有数据的
套接字
上接收数据,被迫进入阻塞状态。
select
参数和返回值意义如下: int
select
( IN int nfds, //
select
的
套接字
数量的限制
在很多比较各种网络模型的文章中,但凡提到
select
模型时,都
会
说
select
受限于轮询的
套接字
数量,这个 数量也就是系统头文件中定义的FD_SETSIZE值(例如64)。但事实上这个算不上真的限制。 C语言的偏方: 在C语言的世界里存在一个关于结构体的偏门技巧,例如: typedef struct _str_type { int _len; c
linux
套接字
个数,关于accept()函数能产生多少个
套接字
和在LINUX 能产生多少个
线程
...
我这几天在编写关于LINUX网络程序,在我的程序中只能产生1024个左右accept()函数的
套接字
,所以只监听1024个左右的客户端,和我的程序要求的50000个差得太远,还有我的程序只能生成302个
线程
,也太少了,请问哪位高手能给我指点一下,谢谢|accept没听说有1024的限制。你用
select
了吗?
select
有1024的限制。可以改用poll.
线程
数的限制也没这么少,应该是7679。...
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章