1)多进程和多核在编程方面有什么区别?
2)对于多线程,我们需要通过互斥锁和同步来保存共享数据,那么在多核上运行的程序呢?
3)如果我的程序中有一个进程并在多核环境中运行它?处理会更快吗?
1)多进程和多核在编程方面有什么区别?
2)对于多线程,我们需要通过互斥锁和同步来保存共享数据,那么在多核上运行的程序呢?
3)如果我的程序中有一个进程并在多核环境中运行它?处理会更快吗?
1)我假设多进程是指将一个程序分成多个进程(通常使用fork()
POSIX 系统中的方法),而不是多任务处理。多处理或多任务的通常定义是允许单个 CPU 通过经常在它们之间切换来看似并行地运行多个进程。多核意味着单个 CPU 可以拥有多个能够执行任务的核心,并且所有执行单元都以某种方式连接(取决于处理器的架构)。这些东西通常不会影响您的编程方式,除非您正在编写非常低级的软件,例如操作系统。分叉进程(我相信你的意思)通常是通过操作系统提供的某种方法完成的,实际上是一个很大的话题,你可以找到很多书。
2) 操作系统通常为底层 CPU 架构提供抽象,这意味着作为程序员的你不必关心你的 PC 是多核 CPU 还是单核,所以如果你使用多线程,你仍然需要分享你的数据一样。如果您正在为多核 CPU 编写操作系统,那么事情会变得更加困难,您必须阅读 CPU 支持的指令。
3)如果您的程序只有一个进程(并且不产生线程),那么无论它是在单核还是多核系统上运行,执行都将(几乎)相同。它在多核系统上获得的唯一速度优势可能来自操作系统将其推送到运行其他任务不多的核心上,从而以更少的任务切换为其提供更多的 CPU 时间。使用多核系统的真正收益只能通过使用并行编程来实现。