多处理器编程和多核编程有什么区别? 最好在python中展示如何编写用于多道程序设计的小程序的示例。多核编程
答案 0 :(得分:96)
没有“多处理器”或“多核”编程之类的东西。 “多处理器”和“多核”计算机之间的区别可能与您作为应用程序员无关;它与核心如何共享内存访问权限的细微差别有关。
为了利用多核(或多处理器)计算机,您需要一个以可以并行运行的方式编写的程序,以及一个允许程序实际并行执行的运行时核心(和操作系统,尽管您可以在PC上运行的任何操作系统都可以执行此操作)。这实际上是并行编程,尽管并行编程有不同的方法。与Python相关的是多处理和多线程。
在C,C ++,Java和C#等语言中,您可以通过执行多个线程来编写并行程序。 CPython和PyPy运行时的全局解释器锁定排除了此选项;但仅适用于那些运行时。 (在我个人看来,多线程是dangerous and tricky,Python通常会鼓励你不要将它视为获得性能优势的一种方式。)
如果你想编写一个可以在Python中运行多个核心的并行程序,你有几个不同的选择:
threading
模块编写多线程程序,并在IronPython或Jython运行时中运行它。processing
模块(现在包含在Python 2.6中作为multiprocessing
模块),一次在多个进程中运行代码。subprocess
模块运行多个python解释器并在它们之间进行通信。无论您选择哪个选项,您都需要了解如何将您的程序正在进行的工作拆分为有意义的分块。由于我不确定您正在考虑编写什么类型的程序,因此很难提供有用的示例。
答案 1 :(得分:24)
正如在另一篇文章中提到的,Python 2.6具有multiprocessing模块,它可以利用多个核心/处理器(通过透明地启动多个进程来绕过GIL)。它提供了一些类似于线程模块的原语。您可以在文档页面中找到一些(简单)用法示例。
答案 2 :(得分:5)
您实际上可以编写将使用多个处理器的程序。由于GIL锁定,您无法使用线程执行此操作,但您可以使用不同的进程执行此操作。 之一:
答案 3 :(得分:2)
您可以在python中阅读有关多线程的信息,以及一般的线程
Python中的多线程: http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/
答案 4 :(得分:2)
如果我理解正确的话,Python会有一些名为GIL(全局解释器锁)的东西,它有效地使得在Python中执行多个线程时无法利用多核。
参见Guido van Rossum关于这个主题的blog entry。据我所知,在“主流”语言中,只有C / C ++和Java才能有效支持多核。
答案 5 :(得分:1)
主要区别在于您如何组织和分发数据。多核通常在cpu中的不同核心之间具有更高的带宽,而多处理器需要在cpu之间涉及总线。
Python 2.6已经实现了多进程(进程,如程序运行)以及更多用于多线程编程的同步和通信对象。
答案 6 :(得分:0)
如果您没有Python 2.6(例如,如果您使用的是Ubuntu Edgy或Intrepid则没有),您可以使用Google code backported版本的多处理。它是PyPI的一部分,这意味着您可以使用EasyInstall(它是Ubuntu中python-setuptools包的一部分)轻松安装它。