关于IOCP 的一个问题

xuexi1028 2014-03-03 07:23:08
大家有没有想过一个问题,IOCP 的 IO线程数量 为什么是CPU*2+2 个,这个值有什么特殊的含义,
不太懂有大神解答嘛
...全文
773 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-03-12
  • 打赏
  • 举报
回复
大家有没有想过一个问题,银行和火车售票的窗口工作人员数量 为什么是窗口数*2+2 个,这个值有什么特殊的含义。
worldy 2014-03-12
  • 打赏
  • 举报
回复
完成端口在某个瞬间,并发数由CreateXXX最后一个参数指定,一般不会超出该指定数;比如设置0,则并发数为系统处理器数量。 如果创建的线程数超出指定数的部分,线程在GetQueued,,,,时被阻塞,不会被调度;当某个线程接到完成通知被被内核唤醒之后,有可能在后续的处理中,进入sleep,此时,参与调度的线程数就减少(因为有线程在睡觉),此时,如果有多余的线程,则内核会让多余的线程中的一个替代正在睡觉的线程,这样可以维持处理的并发线程数在最佳状态。这是IOCP很重要的一个机制,如果不这样,可能由于某个处理器的能力被浪费了;至于在睡觉的线程数为多少,则是一种江湖经验,一般取处理器数量乘2,或者附近值,线程数和处理器数相同或者少也没有问题,功能同样实现,只是性能可能会有所差别而已。取多少都可以,lz无须太纠结
wushuang443 2014-03-12
  • 打赏
  • 举报
回复
对,经验问题,有时候别人也会说CPU*2+1,具体的还是看自己吧
翅膀又硬了 2014-03-05
  • 打赏
  • 举报
回复
引用 3 楼 xuexi1028 的回复:
你们确定嘛,,这个值是否和其他的什么相关
大家都说是经验值了,你怎么还不信。
xuexi1028 2014-03-04
  • 打赏
  • 举报
回复
你们确定嘛,,这个值是否和其他的什么相关
Eleven 2014-03-04
  • 打赏
  • 举报
回复
经验值。。。
  • 打赏
  • 举报
回复
这是经验数据,不是严格的数字。实际上你可以设置为任何值。 比如甚至可以不再开线程,直接本线程处理 比如线程收到包后的处理中含有Sleep,那么你开100个线程也不能保证及时处理数据----因为线程都在sleep,没功夫投递WSARecv

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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