看了msdn,最佳推荐是cpu数和线程数目要相当,这样才避免线程切换带来的额外开!也有些朋友推荐线程数目为cpu数目两倍最佳.
现在,我的问题是我要管理50个socket左右,是单cpu,开的接收线程数目多少比较好.
我自己相法是使用CAsyncSocket,并且OnReceive中接收数据,不另外开数据接收线程.
另外开数据处理线程,处理数据队列.不知数据并发处理效果如何?

解决方案 »

  1.   

    通常只要你能保证住主线程不停地Recv数据就可以了.因为通常我们服务器只有一块或两块网卡.
    也就是说你如果有多个线程,这几个线程也不可能同时Recv.
    所以我想是这样的,在主线程中Recv数据.接收完后数据的处理可以交给work线程.
      

  2.   

    还真是晕呀,才50个socket,随便用哪个I/O模型都能轻松应付,而且各种模型间的差距也根本看不出来.
      

  3.   

    WinEggDrop(WinEggDrop)说的没错,随便用个模型都OK如果在主线程中接收数据,主线程的界面根本响应不了其他消息
      

  4.   

    使用重叠IO或完成端口模型,只需少数的线程就能处理众多的Socket
      

  5.   

    WinEggDrop(WinEggDrop)说的没错,随便用个模型都OK如果在主线程中接收数据,主线程的界面根本响应不了其他消息---------------------------------------
    如果不在主线程接收,你就要频繁切换线程:主线程收到有数据到消息,交给辅线程接收,频繁切换,消耗资源可不小!!!!
      

  6.   

    使用重叠IO或完成端口模型,只需少数的线程就能处理众多的Socket
      

  7.   

    不用那么怕线程切换,
    你什么都不做,系统中早就有几十上百个线程在了,
    如果很费的话,WINDOWS还运行的动啊?
    线程切换实际消耗的CPU指令数大概是1600个左右,
    相对目前上GHZ的CPU来说,根本微不足道,
    想想LINUX/UNIX,人家主要还是采用FORK(CLONE)
    如果线程切换已经很费的话,那用FORK企不是自己找死了?
    尽管去用好了
      

  8.   

    怎发现个怪事,一有人问要用什么I/O模型,总有人喜欢用要用IOCP(完成端口).如果没搞清楚IOCP有什么优点和缺点就胡扯,误人误已.如果IOCP模型真是在各方面都优于其它模型,网络上的windows下的网络服务器程序,岂不是全都要用这个模型编写才行?不过看看市场上有多少个软件是用IOCP模型的.用IOCP去处理楼主的问题,简直就是用大货车去运两只鸡.
      

  9.   

    不用那么怕线程切换,
    你什么都不做,系统中早就有几十上百个线程在了,
    如果很费的话,WINDOWS还运行的动啊?
    线程切换实际消耗的CPU指令数大概是1600个左右,
    相对目前上GHZ的CPU来说,根本微不足道,
    想想LINUX/UNIX,人家主要还是采用FORK(CLONE)
    如果线程切换已经很费的话,那用FORK企不是自己找死了?
    尽管去用好了-------------------------------
    说是这样说,但是windows几十上百个线程基本上是处于挂起状态的.