1)多进程和多核在编程方面有什么区别?
2)对于多线程,我们需要通过互斥和同步保存共享数据,那么运行在多核上的程序呢?
3)如果我的程序中只有一个进程,并在多核环境中运行它?处理速度会更快吗?
发布于 2013-10-16 19:32:30
1)我假设,多进程意味着将一个程序拆分为多个进程(这通常是在POSIX中使用fork()
方法完成的),而不是多任务处理。多处理或多任务处理的通常定义是允许单个CPU通过频繁地在多个进程之间切换来运行多个进程。多核意味着单个CPU可以有多个能够执行任务的核心,并以某种方式连接所有执行单元(取决于处理器的体系结构)。这些东西通常不会影响您的编程方式,除非您正在编写非常低级的软件,例如操作系统。分叉过程(我相信您的意思是)通常是通过操作系统提供的某种方法来完成的,这实际上是一个很大的主题,您可以找到很多关于它的书籍。
2)操作系统通常为底层CPU体系结构提供抽象,这意味着您作为编程人员不必考虑您的PC是否有多核CPU或单个内核,因此如果您使用多线程,您仍然必须以同样的方式共享数据。如果您正在为多核CPU编写操作系统,那么事情就变得更加困难,您将不得不阅读CPU支持的指令。
3)如果您的程序只有一个进程(并且没有产生线程),那么无论它是在单个内核上运行还是在多核系统上运行,执行都将(几乎)相同。它在多核系统上所能获得的唯一快速好处可能是通过操作系统将其推入一个没有运行许多其他任务的核心上,从而给它更多的CPU时间和更少的任务切换。使用多核系统的实际收益只能通过使用并行编程来实现。
https://stackoverflow.com/questions/19244452
复制相似问题