问题标签 [multicore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1525 浏览

c - c中的并发变量访问

我对 C 中的并发编程有一个相当具体的问题。我对此进行了相当多的研究,但看到了几个相互矛盾的答案,所以我希望得到一些澄清。我有一个类似于以下的程序(抱歉,代码块过长):

有一个线程池为传入数据的连接提供服务,因此可以同时运行多个 newData 实例。在多处理器环境中,我知道在正确处理此代码的计数器部分时存在两个问题:阻止编译器将共享计数器副本缓存在寄存器中,以便其他线程看不到它,并强制CPU 及时将计数器值的存储写入内存,以便其他线程可以看到它。我不希望在计数器检查周围使用同步调用,因为可以接受部分读取计数器值(它将产生与本地副本不同的值,这应该足以得出事件已发生的结论)。将 SharedData 中的 eventCounter 字段声明为 volatile 是否足够?还是我需要在这里做其他事情?还有更好的方法来处理这个吗?

0 投票
10 回答
2797 浏览

multithreading - 如果只使用 1 个线程,我可以轻松编写程序来使用英特尔的四核或 i7 芯片吗?

我想知道在我的程序中是否只有 1 个线程,我可以编写它以便四核或 i7 可以实际使用不同的内核吗?通常当我在四核计算机上编写程序时,CPU 使用率只会达到 25% 左右,而且工作似乎在 4 个核心之间进行,如任务管理器所示。(我写的程序通常是 Ruby、Python 或 PHP,所以它们可能没有那么优化)。

更新:如果我用 C 或 C++ 编写它会怎样,并且

然后对编译器使用最高级别的优化。编译器能否使乘法发生在一个内核上,而加法发生在另一个内核上,从而使两个内核同时工作?使用 2 个核心不是一个相当容易的优化吗?

0 投票
1 回答
386 浏览

multithreading - DCOM/ COM+ 激活的对象会死锁 CPU 吗?

如何计算 COM+ 应用程序的 CPU 级死锁?这是一个在 Win2K 上运行的应用程序。无论负载如何,所有其他对象都使用的 1 个对象开始突然增加调用时间,然后系统崩溃。将系统恢复到正常工作状态的唯一方法是重新启动 COM+ 应用程序。

有趣的是,这种情况无法在 QA 或 DEV 中重现。唯一的区别是 CPU 头数和内存。

COM+ 应用程序是 n 层模型中的应用程序组件,它使用 MSDAORA 连接到使用 v9.2 客户端的 Oracle v9.2 DB。

任何想法/想法都非常受欢迎。

0 投票
1 回答
536 浏览

linux - 开发内核以支持多个 CPU

我希望进入操作系统内核开发,并认为我的贡献是扩展SANOS操作系统以支持多核机器。我一直在阅读有关操作系统的书籍 (Tannenbaum) 以及研究 BSD 和 Linux 如何应对这一挑战,但仍然停留在几个概念上。

  1. SANOS 在多个 CPU 上运行时是否需要更复杂的调度算法,或者当前使用的算法是否可以正常工作?

  2. 我知道线程与启动它们的内核具有亲和力是一个好主意,但是这是通过调度还是通过更改线程创建方式的实现来处理的?

  3. 需要考虑什么才能使 SANOS 可以在具有数百个内核的机器上运行?据我所知,BSD 和 Linux 最多只能支持十几个内核。

0 投票
2 回答
229 浏览

multithreading - 将线程设置为在特定内核上工作的优势?

是否有任何证据表明通过手动选择在哪个处理器上运行线程可以提高系统性能?

例如,假设您将完成最多工作的线程专用于一个核心,而将所有其他“帮助”线程专用于一秒钟。

0 投票
7 回答
369 浏览

64-bit - 在未来的硬件上编程?

我想为未来的硬件练习编程代码。这些是什么?想到的两个主要事物是 64 位和多核。我还注意到缓存很重要,GPU 有自己的技术,但现在我对任何图形编程都不感兴趣。

我还应该知道什么?

-edit- 我知道现在有很多这样的,但很快所有的 cpu 都将是多核的,线程将变得更加重要。我考虑了字节序(大字节序与小字节序),但发现这并不重要,并且已经有一个大字节序 CPU 可供测试。

0 投票
4 回答
8637 浏览

multithreading - 什么是 Haskell 中的“火花”

我对“火花”的概念感到困惑

它是 Haskell 中的一个线程吗?或者是产生一个新线程的动作?

谢谢大家:

总而言之,火花不是线程,而是更多的计算单元(用 C#/Java 术语表示的任务)。所以这是实现任务并行的 Haskell 方式。

0 投票
5 回答
1217 浏览

multithreading - 有没有关于并发的好播客?

并发是不少技术播客的热门话题之一。然而,我找不到专门针对并发编程基础、技术等的播客。如果没有专门针对并发的播客,哪个技术播客最能突出这个主题?

0 投票
11 回答
58802 浏览

assembly - 多核汇编语言是什么样的?

曾几何时,要编写 x86 汇编程序,例如,您会看到说明“将 EDX 寄存器加载为 5”、“增加 EDX 寄存器”等指令。

对于具有 4 个内核(甚至更多内核)的现代 CPU,在机器代码级别是否看起来像有 4 个独立的 CPU(即只有 4 个不同的“EDX”寄存器)?如果是这样,当您说“增加 EDX 寄存器”时,是什么决定了哪个 CPU 的 EDX 寄存器增加?现在 x86 汇编器中是否有“CPU 上下文”或“线程”概念?

核心之间的通信/同步如何工作?

如果您正在编写一个操作系统,通过硬件公开什么机制来允许您在不同的内核上调度执行?它是一些特殊的特权指令吗?

如果您正在为多核 CPU 编写优化编译器/字节码 VM,您需要特别了解 x86 以使其生成可在所有内核上高效运行的代码?

对 x86 机器代码进行了哪些更改以支持多核功能?

0 投票
7 回答
26832 浏览

python - 在 Linux 上使用任务集的多核系统上的 Python 全局解释器锁定 (GIL) 解决方法?

所以我刚刚看完了关于 Python Global Interpreter Lock (GIL) http://blip.tv/file/2232410的演讲。

它的要点是 GIL 对于单核系统来说是一个非常好的设计(Python 基本上将线程处理/调度留给了操作系统)。但这在多核系统上可能会严重适得其反,最终导致 IO 密集型线程被 CPU 密集型线程严重阻塞、上下文切换的代价、ctrl-C 问题 [*] 等等。

因此,由于 GIL 限制我们基本上只能在一个 CPU 上执行 Python 程序,我的想法是为什么不接受这一点并简单地使用 Linux 上的任务集来将程序的亲和性设置为系统上的某个核心/cpu(尤其是在在多核系统上运行多个 Python 应用程序)?

所以最终我的问题是:有没有人尝试过在 Linux 上使用带有 Python 应用程序的任务集(尤其是在 Linux 系统上运行多个应用程序时,以便可以将多个内核与绑定到特定内核的一个或两个 Python 应用程序一起使用),如果是这样的话结果是什么?值得吗?对于某些工作负载,它会使情况变得更糟吗?我计划这样做并对其进行测试(基本上是看看程序是否需要更多或更少的时间来运行),但我很想听听其他人的经验。

补充:David Beazley(在链接视频中发表演讲的人)指出,一些 C/C++ 扩展手动释放 GIL 锁,如果这些扩展针对多核(即科学或数字数据分析等)进行了优化,那么而不是获得多核的好处来处理数字,扩展将被有效地削弱,因为它仅限于单核(因此可能会显着减慢您的程序速度)。另一方面,如果您不使用这样的扩展

我不使用多处理模块的原因是(在这种情况下)程序的一部分是严重的网络 I/O 绑定(HTTP 请求),因此拥有一个工作线程池是一种很好的方式来提高性能,因为一个线程触发一个 HTTP 请求,然后因为它在等待 I/O 放弃了 GIL,另一个线程可以做到这一点,所以程序的一部分可以轻松运行 100 多个线程而不会对 CPU 造成太大伤害,让我实际使用可用的网络带宽。至于无堆栈 Python/etc,我对重写程序或替换我的 Python 堆栈并不太感兴趣(可用性也是一个问题)。

[*] 只有主线程可以接收信号,所以如果你发送一个 ctrl-C,Python 解释器基本上会尝试让主线程运行以便它可以处理信号,但是因为它不直接控制运行哪个线程(这留给操作系统)它基本上告诉操作系统继续切换线程,直到它最终到达主线程(如果你不走运可能需要一段时间)。