现代编程语言为其用户提供了作为一等公民的并行性和并发机制。我了解并行算法是如何编程的,并且可以很好地想象多核 CPU 上的两个线程如何并行运行。
然而,这些平台中的大多数还支持在单个线程上运行并行进程。
- 这些过程真的并行运行吗?
- 在汇编级别上,如何在单个线程上同时执行两个不同的例程?
现代编程语言为其用户提供了作为一等公民的并行性和并发机制。我了解并行算法是如何编程的,并且可以很好地想象多核 CPU 上的两个线程如何并行运行。
然而,这些平台中的大多数还支持在单个线程上运行并行进程。
TLTR; :单个非超线程 CPU 内核上的并行性(在真正的同时执行的意义上)是不可能的。
硬件(<- EDIT) 可以在多个级别上实现并行。按粒度递减排序:
您的问题与在案例 3.(以防 HT 不可用/禁用)或 4 中运行两个软件线程有关。
在这两种情况下,进程实际上并不并行运行。由于在 CPU 级别执行的极快的上下文切换,用户有一种同时性的印象,这往往会按顺序将物理核心(相应线程)时间分配给一个或另一个软件线程
在这两种情况下,这些例程都不会同时执行,而是按顺序执行
分配给这两个例程中的每一个的相对优先级可以通过您赋予进程的“优先级”在各种操作系统上设置,这将由操作系统的调度程序处理,而调度程序又将分配 CPU 时间。
HTH。
要执行测试以更好地理解此主题,您可能需要搜索“cpu affinity”。这将让您在多核 CPU 的一个物理单核上运行一个双线程进程,并计算每个线程所花费的时间,同时修改它们的优先级等......
是的,每个线程都有并行性,无论您使用哪种编程语言,您都可以免费获得它(尽管并行性的数量可能会有所不同)。
它被称为指令级并行。细节相当复杂,并且在不同的处理器微架构之间有所不同。
Computer Architecture: A Quantitative Approach是一本很棒的书,其中包括关于指令级并行性的一章,书中的示例教授了如何理性地思考工程。
查看以下链接以获取更多信息:
http://en.wikipedia.org/wiki/Superscalar