C# 在.net平台中,处理器核心与生产者-消费者的多线程使用

C# 在.net平台中,处理器核心与生产者-消费者的多线程使用,c#,.net,asp.net-mvc,multithreading,producer-consumer,C#,.net,Asp.net Mvc,Multithreading,Producer Consumer,所以我有一个并发队列和两个线程。我有一个线程正在处理数据和排队。我有另一个线程,它正在对信息进行排队并执行一些操作 这两个线程是否可能在不同的内核上运行[显然无法保证在哪里运行什么]?我使用的是asp.net[MVC]4.0,我没有使用web garden设置,这就是为什么我想知道它是否像worker进程一样被限制为1个核心。我的想法是我有一个多核系统,我希望能够利用这一点。我会使用WebGarden,但我的队列是静态类,我认为它不会在WebGarden中的工作进程之间共享 我还考虑在其中一个线

所以我有一个并发队列和两个线程。我有一个线程正在处理数据和排队。我有另一个线程,它正在对信息进行排队并执行一些操作

这两个线程是否可能在不同的内核上运行[显然无法保证在哪里运行什么]?我使用的是asp.net[MVC]4.0,我没有使用web garden设置,这就是为什么我想知道它是否像worker进程一样被限制为1个核心。我的想法是我有一个多核系统,我希望能够利用这一点。我会使用WebGarden,但我的队列是静态类,我认为它不会在WebGarden中的工作进程之间共享

我还考虑在其中一个线程中执行Parallel.ForEach,因为它可能需要执行多达240个可以并行工作的操作。同样,它是否会绑定到工作进程核心?它是否会在其他可用核心上运行


在大多数多核系统中,一个进程中运行的线程可以跳转到不同的核。.NET
Process
类有一个可写的
ProcessorAffinity
属性,允许您将位掩码设置为在特定处理器上运行特定进程中的线程

话虽如此,你有什么理由不能让第三方物流完成它的工作?您的问题回避了这一点,但它是为完成这类工作而设置的,并且在开箱即用(例如,您的
Parallel.ForEach
)方面做得相当好。您确实可以通过
MaxDegreesOfParallelism
控制粒度,这将并发操作的数量限制在该特定实例上


除此之外,您是否考虑过运行它以查看这是否是一个实际问题?

在大多数多核系统中,进程中运行的线程可以跳转到不同的核心。.NET
Process
类有一个可写的
ProcessorAffinity
属性,允许您将位掩码设置为在特定处理器上运行特定进程中的线程

话虽如此,你有什么理由不能让第三方物流完成它的工作?您的问题回避了这一点,但它是为完成这类工作而设置的,并且在开箱即用(例如,您的
Parallel.ForEach
)方面做得相当好。您确实可以通过
MaxDegreesOfParallelism
控制粒度,这将并发操作的数量限制在该特定实例上


除此之外,您是否考虑过运行它以查看这是否是一个实际问题?

它将使用其他内核。但是ASP.NET中的m-threading还有其他挑战,比如在哪个进程下以及如何保持该进程的活力。它将很好地使用其他内核。但是ASP.NET中的m-threading还有其他挑战,比如在哪个进程下以及如何保持该进程的活力。