WEB开发网
开发学院软件开发C语言 浅谈线程池(中):独立线程池的作用及IO线程池 阅读

浅谈线程池(中):独立线程池的作用及IO线程池

 2010-09-30 20:49:16 来源:WEB开发网   
核心提示: 我们也可以使用代码来操作IO线程池,例如下面这个接口便是向IO线程池递交一个任务:publicstaticclassThreadPool{publicstaticboolUnsafeQueueNativeOverlapped(NativeOverlapped*overlapped);}Nativ

我们也可以使用代码来操作IO线程池,例如下面这个接口便是向IO线程池递交一个任务:

public static class ThreadPool  
{  
    public static bool UnsafeQueueNativeOverlapped(NativeOverlapped* overlapped);  
} 

NativeOverlapped包含了一个IOCompletionCallback回调函数及一个缓冲对象,可以通过Overlapped对象创建

Overlapped会包含一个被固定的空间,这里“固定”的含义表示不会因为GC而导致地址改变,甚至不会被置换到硬盘上的Swap空间去。这么做的目的是迎合IOCP的要求,但是很明显它也会降低程序性能。因此,我们在实际编程中几乎不会使用这个方法3。

注1:如果没有加以说明,我们这里谈论的对象默认为XP及以上版本的Window操作系统。

注2:timeslice又被称为quantum,不同操作系统中定义的这个值并不相同。在Windows客户端操作系统(XP,Vista)中时间片默认为2个clock interval,在服务器操作系统(2003,2008)中默认为12个clock interval(在主流系统上,1个clock interval大约10到15毫秒)。服务器操作系统使用较长的时间片,是因为一般服务器上运行的程序比客户端要少很多,且更注重性能和吞吐量,而客户端系统更注重响应能力——而且,如果您真需要的话,时间片的长度也是可以调整的。

注3:不过,如果程序中多次复用单个NativeOverlapped对象的话,这个方法的性能会略微好于QueueUserWorkItem,据说WCF中便使用了这种方式——微软内部总有那么些技巧是我们不知如何使用的,例如老赵记得之前查看ASP.NET AJAX源代码的时候,在MSDN中不小心发现一个接口描述大意是“预留方法,请不要在外部使用”。对此,我们又能有什么办法呢?

上一页  1 2 3 4 5 

Tags:线程 独立 线程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接