首页 新闻 搜索 专区 学院

ThreadPool.SetMaxThreads的两个参数???

0
[已解决问题] 解决于 2013-09-02 18:02

 ThreadPool.SetMaxThreads(20,20);

第一参数是设置线程池辅助线程,第二个值是设置异步I/O线程  这两个什么区别??

koi的主页 koi | 初学一级 | 园豆:2
提问于:2013-09-02 15:47
< >
分享
最佳答案
1

异步 I/O 是用于处理I/O完成端口的线程。区别在于,系统如何为I/O操作和非I/O操作分配线程。当你的程序是I/O密集型时,你应该将线程数向I/O偏移,如果你的程序是CPU密集型时,你应该将线程数向工作线程偏移。

记住这是一个比例配置的问题,不是绝对数的大小关系。

奖励园豆:5
Launcher | 高人七级 |园豆:45045 | 2013-09-02 16:02

那我用ThreadPool.QueueUserWorkItem的时候 系统是怎么选择I/O或者辅助线程的?  自动的?

koi | 园豆:2 (初学一级) | 2013-09-02 16:42

@koi: 自动的,根据具体执行的代码来决定。

Launcher | 园豆:45045 (高人七级) | 2013-09-02 17:04
其他回答(1)
1

多线程编程的一个重要特点就是能够充分利用CPU的运算能力,更快地完成某个任务。很明显,如果一个非常庞大的计算任务只交由一个线程来完成,那么只能让一个CPU参与运算。但是如果将一个大任务拆分成多个互不影响的子任务,那么就能让多个CPU同时参与运算,所花的时间自然就少了。如果某个操作的目的是进行大量运算,或者说需要花费大量时间运算上的操作,我们将其称作“Compute-Bound Operation”,也就是受运算能力限制的操作。

与“Compute-Bound Operation”相对的则是“IO-Bound Operation”。“IO-Bound Operation”是指那些由于受到外部条件限制,完成这样一个任务需要在IO上花费大量时间的操作。例如读取一个文件,或者请求网络上的某个资源。对于这种操作,计算的线程再多,运算能力再强也无济于事,因为任务受到的是硬盘、网络等IO设备带来的限制。对于IO-Bound Operation,我们能做的只有“等待”。

 

http://www.cnblogs.com/JeffreyZhao/archive/2008/02/24/use-async-operation-properly.html

滴答的雨 | 园豆:3690 (老鸟四级) | 2013-09-02 17:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册