C# 有人知道如何在PrAllelexTensurextras中使用IOCompletionPortTaskScheduler和IOTaskScheduler吗?它们有什么用途?

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,而后者是 被

是否有人知道如何在ParallelExtensionExtras中使用以下类以及它们的用途

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***我:这是超额认购的一个例子