c# - 在不同的CPU内核上执行上下文切换和线程

标签 c# .net multithreading context-switch memory-barriers

从关于SO的另一个问题中,我发现以下简单方法可能

  void B()
  {
    if (_complete)
    {
      Console.WriteLine (_answer);
    }
  }

如果在if和控制台writeline调用之间进行上下文切换,则可能在不同的CPU上执行。这对我来说是个新闻,所以我现在想知道何时可以为另一个CPU切换单线程代码,以及为什么在上述这种简单情况下有意义? ?

最佳答案

基本上,上下文切换是操作系统“冻结”它所在的线程,以便另一个线程可以获得一些CPU时间。当第一个线程“解冻”时,不要求它在先前运行的CPU上继续运行。具体细节由操作系统决定。

例如,如果在解冻线程时有一个未使用的完整内核,而该内核恰好与运行该线程的先前内核不同,那么不使用空闲内核会很浪费。

关于c# - 在不同的CPU内核上执行上下文切换和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7260402/

相关文章:

c# - 在 IIS 上更改 targetFramework

c# - DataGrid 中的 WPF 绑定(bind)到 DataContext

.net - 是否可以将 Selenium 与包含 WebBrowser 对象的 C# windows 窗体一起使用?

c# - 公开原始模型而不是单个属性时的 INotifyPropertyChanged

multithreading - 原子性和不变性是并发/并行编程中解决相同问题的两种不同方法吗?

c# - 在 Fluent NHibernate 中通过 ID 设置引用的实体

c# - 嵌套列表框滚动问题

.net - 在哪里可以找到 MonoMac 的教程和示例?

java - 在所有线程完成后退出 Java 程序

c# - 有条件地在线程中使用锁?