处理器核心在.net平台中与生产者-消费者一起使用多线程



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

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

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

提前感谢

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

话虽如此,你有什么理由不能让TPL做它的工作吗?你的问题回避了这一点,但它是为做这类工作而设置的,并且在开箱即用的情况下做得很好(例如,你的Parallel.ForEach)。使用MaxDegreesOfParallelism确实可以控制粒度,它将并发操作的数量限制在该特定实例上。

最重要的是,你有没有考虑过运行它,看看这是否是一个实际的问题?

最新更新