NCindy

.net平台上的高性能网络程序开发框架

Concurrency and Coordination Runtime读后感(2)

本文是我对MSDN Magazine 2006年9月号中ConcurrentAffairs专栏的读后感(2)
原文作者:Jeffrey Richter,原文链接:http://msdn.microsoft.com/msdnmag/issues/06/09/ConcurrentAffairs/
=========================

Dispatcher类
实际上Dispatcher类是一个线程池,和CLR内置的线程池一样,它通过delegate来调用方法。Dispatcher默认会为当前机器的每个CPU创建一个线程。与CLR的线程池实现不同的是,Dispatcher中的线程数量是固定的,而CLR的线程池会随需要而增加和减少。


DispatcherQueue类
一个DispatcherQueue维护了一个表示准备执行的方法的delegate的队列,Dispatcher的线程等待着DispatcherQueue中有元素加入,通常DispatcherQueue都是空的,一旦有delegate被加入DispatcherQueue,Dispatcher就会开始执行delegate所指向的方法。当然,如果有一批delegate被加入到队列中,他们会按顺序执行。

根据上面所说的,Dispatcher和DispatcherQueue的行为看起来和CLR的ThreadPool有点象,ThreadPool的QueueUserWorkItem把一个delegate放入队列中。但是在CLR提供的ThreadPool中,如果有1000个delegate已经被放入队列中,新加入一个delegate就必须等待前面的1000个都被执行之后才能得到执行。而在CCR中,你可以使用多个DispatcherQueue,一个用来放置普通的任务,另一个用来放置高优先级别任务,Dispatcher使用round-robin策略从所有的DispatcherQueue中取出元素来执行,也就是说,高优先级的任务不需要等待在它之前已经放入Dispather队列的任务都执行完才能执行。只需要等它自己所处的队列前面的元素执行完成就可以了。

posted on 2006-10-17 11:03  iceboundrock  阅读(1333)  评论(2编辑  收藏  举报

导航