socket recv 效率问题

mmidd 2011-06-24 01:13:43
问题:

测试多线程程序并发

socket recv阻塞模式接收数据时 正常情况只用不到1ms

个别情况却达到了几秒钟

怎么避免这种超时的现象
...全文
164 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmidd 2011-06-24
  • 打赏
  • 举报
回复
要求必须在一秒内收到数据并响应

超过1秒的都是超时,有超时是不允许的

网络状况很好
qq120848369 2011-06-24
  • 打赏
  • 举报
回复
什么叫超时....

网络状况不好?
qq120848369 2011-06-24
  • 打赏
  • 举报
回复
主控线程select监听套接字,监听套接字可读则accept获得一个连接套接字,并且分发一个线程里去send & recv .

线程里为了判断超时,可以select连接套接字阻塞2秒,超时了你想怎么处理再说...大不了关闭这个连接就可

以了.
mmidd 2011-06-24
  • 打赏
  • 举报
回复
每秒请求 100次 每次数据在 250字节左右

返回数据约在 500字节左右
mmidd 2011-06-24
  • 打赏
  • 举报
回复
现在是 有一个主控进程 select

当有socket连接 将这个 socket分配到一个线程

线程里对这个socket进行读写

问题是这边不允许有超时的情况,现在测试情况 看 个别socket recv数据时超过了2秒

怎么解决这样的超时问题呢?

我在发送数据端打了log发送数据没有超时
iambic 2011-06-24
  • 打赏
  • 举报
回复
测试问题。可能你发送的问题,或者你管理线程的代码有问题。另外不知道你并测试的发数和传输数据的大小,这个结果就没什么讨论的意义。
qq120848369 2011-06-24
  • 打赏
  • 举报
回复
可以将连接socket分发给一个进程或者线程去recv,利用select提供超时控制.
ljq550000 2011-06-24
  • 打赏
  • 举报
回复
为什么不使用非阻塞模式呢 如select 重叠模式等
mmidd 2011-06-24
  • 打赏
  • 举报
回复
是的

有个线程池 每个线程会分配一个socket进行操作

我测试的是 线程里的socket recv数据的时间
就想叫yoko 2011-06-24
  • 打赏
  • 举报
回复
你测试的是多个线程分别recv不同socket的数据 其间的间隔时间吗

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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