ThreadPool.SetMaxThreads(20,20);
第一参数是设置线程池辅助线程,第二个值是设置异步I/O线程 这两个什么区别??
异步 I/O 是用于处理I/O完成端口的线程。区别在于,系统如何为I/O操作和非I/O操作分配线程。当你的程序是I/O密集型时,你应该将线程数向I/O偏移,如果你的程序是CPU密集型时,你应该将线程数向工作线程偏移。
记住这是一个比例配置的问题,不是绝对数的大小关系。
那我用ThreadPool.QueueUserWorkItem的时候 系统是怎么选择I/O或者辅助线程的? 自动的?
@koi: 自动的,根据具体执行的代码来决定。
多线程编程的一个重要特点就是能够充分利用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