多核编程技巧和所需技术

时间:2013-10-08 09:51:29

标签: multiprocessing mutex semaphore multicore

1)多编程和多核在编程方面有什么区别?

2)对于多线程,我们需要通过互斥和同步来保存共享数据,那么在多核上运行的程序呢?

3)如果我的程序中有一个进程并在多核环境中运行它?处理会更快还是没有?

1 个答案:

答案 0 :(得分:0)

1)我假设通过多进程你的意思是将一个程序分成多个进程(通常使用POSIX系统中的fork()方法完成),而不是多任务处理。多处理或多任务处理的通常定义是允许单个CPU通过非常频繁地在它们之间切换来运行看似并行的多个进程。多核意味着单个CPU可以具有多个能够执行任务的核心,并且所有执行单元都以某种方式连接(取决于处理器的体系结构)。除非您编写的是非常低级的软件,例如操作系统,否则这些事情通常对您的编程方式没有影响。分叉过程(我相信你的意思)通常是通过操作系统提供的一些方法完成的,实际上是一个很大的主题,你可以找到很多书。

2)操作系统通常为底层CPU架构提供抽象,这意味着作为程序员,您不必关心自己的PC是否具有多核CPU或单核,因此如果使用多线程,您仍然需要以同样的方式分享您的数据。如果您正在为多核CPU编写操作系统,那么事情会变得更加困难,您将不得不阅读CPU支持的指令。

3)如果你的程序只有一个进程(并且没有生成线程),那么执行将(几乎)相同,无论它是在单核还是在多核系统上运行。它可以在多核系统上获得的唯一速度优势可能来自操作系统将其推送到运行没有多少其他任务的核心上,从而通过更少的任务切换为其提供更多的CPU时间。使用多核系统的实际收益只能通过并行编程来实现。