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

标签 c# .net asp.net-mvc multithreading producer-consumer

所以我有一个并发队列和 2 个线程。我有 1 个线程正在处理数据和排队。我有另一个线程正在使信息出队并因此执行一些操作。

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

我还考虑在其中一个线程中执行 Parallel.ForEach,因为它可能必须执行多达 240 个可以并行工作的操作。这是否会再次与工作进程核心相关联,它会在其他可用核心上运行吗?

提前致谢

最佳答案

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

话虽这么说 - 有什么理由不能让 TPL 完成它的工作吗?你的问题没有解决这个问题,但它被设置为做这种工作并且开箱即用(例如,你的 Parallel.ForEach)。您确实可以通过 MaxDegreesOfParallelism 控制粒度,这会限制特定实例的并发操作数。

最重要的是,您是否考虑过运行它以查看这是否是一个实际问题?

关于c# - 处理器核心在 .net 平台中与生产者消费者一起使用多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623657/

相关文章:

c# - 调整 MenuStrip 的宽度

c# - 为什么电话数据注释不起作用,即使在需要时也是如此?

c# - 令人困惑的重载决议

C# - 如何在 Windows 64 位上获取程序文件 (x86)

.net - 在哪里可以找到学习 XAML 的好资源?

.net - 重构小型 F# 函数

c# - 读取所有字节后 TcpListener 挂起

c# - 如何处理 NUnit 中抛出的异常

c# - 在 View 中禁用复选框

javascript - 访问 .js 文件中的模型参数