C# 有人知道如何在PrAllelexTensurextras中使用IOCompletionPortTaskScheduler和IOTaskScheduler吗?它们有什么用途?
是否有人知道如何在ParallelExtensionExtras中使用以下类以及它们的用途C# 有人知道如何在PrAllelexTensurextras中使用IOCompletionPortTaskScheduler和IOTaskScheduler吗?它们有什么用途?,c#,.net,parallel-processing,task-parallel-library,C#,.net,Parallel Processing,Task Parallel Library,是否有人知道如何在ParallelExtensionExtras中使用以下类以及它们的用途 IOCompletionPortTaskScheduler.cs IOTaskScheduler.cs IOTaskScheduler 虽然我们经常提到“.NET” 线程池,ThreadPool NET中的抽象实际上是构建的 在两个池的顶部,一个引用 作为工作人员池和一个参考 作为I/O池。前者是最重要的 被QueueUserWorkItem 方法以及默认情况下 TaskScheduler,而后者是 被
IOCompletionPortTaskScheduler.cs
IOTaskScheduler.cs
IOTaskScheduler
虽然我们经常提到“.NET”
线程池,ThreadPool
NET中的抽象实际上是构建的
在两个池的顶部,一个引用
作为工作人员池和一个参考
作为I/O池。前者是最重要的
被QueueUserWorkItem
方法以及默认情况下
TaskScheduler
,而后者是
被
UnsafeQueueNativeOverlapped
方法,
并且经常被用于工作场所
Windows通信基础
Windows工作流基础。这个
IOTaskScheduler
中的调度程序
IOTaskScheduler.cs文件在上运行任务
此I/O线程池通过
UnsafeQueueNativeOverlapped
方法
从这里开始:
IOCompletionPortTaskScheduler类提供了一个
使用I/O完成端口来控制并发。它是
需要将计划程序中的最大线程数设置为
并发执行以及中可用的线程数
用于执行任务的计划程序
从这里开始:
及以下资料来自:
I/O完成端口为
在多处理器上处理多个异步I/O请求
系统。当进程创建I/O完成端口时,系统
为仅用于以下目的的请求创建关联的队列对象:
为这些请求提供服务。处理多个并发进程的进程
异步I/O请求可以通过
将I/O完成端口与预先分配的线程结合使用
而不是在线程接收I/O请求时创建线程
它主要是作为另一个实现调度程序以针对特定执行环境的示例出现的。实际上,在一个“线程池”中有两个线程池,即工作线程池和I/O线程池。通常,TPL以前者为目标(与QueueUserWorkItem相同)。NET中还有其他针对后者的系统,例如WCF。因此,如果您想通过让TPL任务与WCF的工作在同一个池中运行来最小化WCF和TPL之间的超额订阅,您可以使用类似IOTaskScheduler的调度器。这也提供了一些见解:为什么要使用ThreadPool.UnsafeQueueNativeOverlapped而不是ThreadPool.QueueUserWorkItem?在我们的开发中,我们发现ThreadPool.QueueUserWorkItem效率低下。如果我们有一些交替的高和低数量的工作项,一些线程可能会忙着等待,人为地增加应用程序的CPU使用率。如果您有相同的模式,并且观察到CPU使用率很高,而实际情况并非如此,则可以尝试ThreadPool.UnsafeQueueNativeOverlapped***我:这是超额认购的一个例子