能力值:
( LV2,RANK:10 )
|
-
-
2 楼
当然了,IOCP的完成后通知回调还是很有效的,只是对这个线程数目有点疑惑!就这么几个线程怎么应对上千个数据同时过来?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
看一看实验数据吧。
附件:I/O模型性能比较表
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我觉得就是不想在处理连接数据时候线程切换的消耗
另外楼主提的问题应该算是计算机整体性能上的问题了
|
能力值:
( LV8,RANK:130 )
|
-
-
5 楼
要回答你的问题,首先得讲讲windows对线程的调度处理问题,在windows中,线程有优先级的,windows总是把时间分给优先的线程,优先线程处理完了,再分给次优先线程,以次往下分配CPU时间,同一优先级线程,分配的时间理论上相等,但实际并不相等,如果说分给每个线程时间为1ms,但并不是每个线程都会将这1ms用完,如等待事件,IO读写处理等待,延时,放弃处理时间等等,有很多因素可以导致线程把CPU时间让出去,由系统调度给其它线程,
其次,按您的说法,系统中几百个线程,如果都把分配给他的CPU时间全部用完(这是非常极端情况,您的CPU将会达100%,而且机器卡得要死),那么,我告诉你,是的,大多数时间轮不到IOCP线程,因为你的线程没有设置优先级,将和其它大部份线程优先级相同,你的线程和几百个线程比较,只能分到相对较少的时间,但实际上,您的系统中几百个线程不会被分配给他的CPU时间全部用完,
如果有2000个连接发数据来,您的线程处理一个连接发来的数据所用时间为1ms,那么,的确得用2S,我只能告诉您,您的处理时间花得太长太长了,一般情况下,在IOCP线程中不使用同步IO函数,因为同步IO函数等待时间不是般地长(相对于异步函数来说)
系统调度线程的开销,不是一般的大,IOCP的优势在于减少系统对线程的调度时间,和减少系统代理IO这一环节,因为你的线程少,所以系统可以减少线程调度,在IOCP中,有一个激活线程的概念,如果一个线程处于被激活状态,那么,IO数据将优先被激活线程处理,而不是去调度其它线程来处理,如果你有2个CPU,而多个重叠IO同时完成,那么,将会由两个线程来处理,而不会调度给其它线程来处理
在IOCP中,如果您的IOCP线程中,没有使用任何同步函数,那么,与CPU数目相同数目的处理线程将是最好的选择,能达到很高效率,如果您多几个线程,多出来的线程将不会被调度,影响不大,但并不是越多的线程越来,越多的线程,只会带来更多的内存消耗与系统处理时间
建议你看一下windows线程调度相关资料以及异步IO相关东西...
|
|
|