c# - 单核cpu上的C#并行和多线程

标签 c# .net multithreading parallel-processing

我有一个使用C#和.net 4.5的应用程序,可以在带有Windows 8.1的Intel Core i5系统上工作,但是当我发布该应用程序并安装在Windows 7 SP1上时,该Windows 7 SP1在具有Intel Pentium 4单核和.net 4.5的系统上运行.3应用程序无法完全正常工作。
我猜会导致此问题的代码部分使用了Parallel.Foreach

我的应用程序也使用异步等待。

是Parallel.Foreach和async等待在多线程处理器上正常工作的吗?

如何在单核上使用该程序?如果需要替换代码,我应该使用什么?

最佳答案

TPL是Parallel.Foreach所利用的,它与线程而不是内核一起工作,这取决于操作系统来调度这些线程。单核处理器将简单地通过单核运行与Parallel.Foreach代码关联的线程。另一方面,异步/等待方法不会显式创建其他线程,而是在当前同步上下文上运行,并且仅在该方法处于 Activity 状态时才在线程上使用时间。同样,单核CPU应该处理异步/等待而不会出现问题。

话虽如此,由于与线程创建/管理相关的额外开销,使用Parallel.Foreach实际上可能会降低性能。如果代码不受CPU限制,那么Parallel.Foreach并不是最好的方法。

关于c# - 单核cpu上的C#并行和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29318242/

相关文章:

c# - 呈现工作流程的控制

c# - 数据表导入行

c# - MahApps MetroProgressBar 无法在 ControlTemplate 内工作

c# - 如何为我的内部 winform 应用程序实现自动更新策略

c# - 如何在 C# 中的运行时实现带参数的静态字典<T>?

c - 埃拉托色尼筛法 Pthread 实现 : thread number doesn't affect computation time

c# - 使用谷歌翻译和我自己的翻译

c# - 相对于另一个表单 vb/c# 中的按钮移动 winform

c++ - 使用 Win32 线程模型时,MinGW-w64 是否支持开箱即用的 std::thread?

C# 多个类可以使用多个引用锁定同一个对象吗?