multithreading - 在哪个操作系统上线程编程足以利用多核?

标签 multithreading operating-system multicore

我想使用我的多线程编程技能(我得到了技能),但我意识到这还不够。如果操作系统没有意识到这种可能性,我的线程可能仍会竞争同一个内核。我可以在英特尔至强架构上使用哪种操作系统/编译器/库组合来线程化内核?

最佳答案

所有现代操作系统都在所有可用内核上分配线程;但是有几种语言或库可以防止这种情况发生。最常见的问题是:

  • 绿色线程。当多个 CPU 很少见且操作系统优化不够时,它曾经具有性能优势。有几个 Java 虚拟机吹嘘这是一个功能,后来转向 M:N 方案,我认为现在到处都是 N:N。

  • GIL:全局解释器锁。一些脚本语言在解释器循环中有很多全局状态,所以有一个大(互斥)锁来确保一致性;但这会阻止同一“空间”的两个线程同时运行。至少 Python 和 Lua 有这个问题。在这些情况下,最好使用多进程而不是多线程。

此外,最好记住大多数受 CPU 限制的应用程序的最大瓶颈是 RAM 带宽,通常不是 CPU 本身,因此让多个线程争夺同一内存可能不是最佳设计。在几个通过小消息进行通信的独立进程中进行重构通常要好得多。

关于multithreading - 在哪个操作系统上线程编程足以利用多核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/508301/

相关文章:

operating-system - 为什么 x86-64 长模式不需要分段?

c - 如何管理插入和删除内容的内存?

linux - 使用轮询和中断方法查找 CPU 效率

performance - 给定磁盘速度慢且多核的动态解压缩对性能有意义吗?

python - 在 Python 中并行运行多个 ONNX 模型进行推理

python - 当另一个线程处于事件状态时,为什么不在全局对象上调用__del__?

r - R中的主/从多核处理

.net - 通过 ThreadPool 循环时,我的 ThreadStatic 变量中的值是否仍然存在?

c++ - 我如何单独创建和启动我的线程