多处理器编程和多核编程之间有什么区别?最好在python中显示示例如何编写用于多程序和多核编程的小程序
Answers:
没有“多处理器”或“多核”编程之类的东西。作为应用程序程序员,“多处理器”计算机和“多核”计算机之间的区别可能与您无关。它与内核如何共享对内存的访问的微妙之处有关。
为了利用多核(或多处理器)计算机,您需要以一种可以并行运行的方式编写程序,并需要一个运行时,该程序才能在多个核上实际并行执行(并且操作系统,尽管您可以在PC上运行的任何操作系统都可以执行此操作)。这实在是并行编程,虽然有不同的方法来并行编程。与Python相关的是多处理和多线程。
在C,C ++,Java和C#等语言中,您可以通过执行多个线程来编写并行程序。CPython和PyPy运行时中的全局解释器锁定排除了此选项;但仅适用于那些运行时。(我个人认为,多线程是危险且棘手的,Python鼓励您不要将其视为获得性能优势的一种方式,这通常是一件好事。)
如果要编写一个可以在Python的多个内核上运行的并行程序,则有几种不同的选择:
threading
模块编写一个多线程程序,然后在IronPython或Jython运行时中运行它。processing
模块(现已包含在Python 2.6中作为multiprocessing
模块)可一次在多个进程中运行您的代码。subprocess
模块运行多个python解释器并在它们之间进行通信。无论选择这些选项中的哪一个,都将需要了解如何将程序正在完成的工作分成有意义的块以进行分离。由于我不确定您打算编写哪种程序,因此很难提供有用的示例。
如另一篇文章中所述,Python 2.6具有多处理模块,该模块可以利用多个内核/处理器(它通过透明地启动多个进程来绕过GIL)。它提供了一些类似于线程模块的原语。您会在文档页面中找到一些(简单的)用法示例。
您实际上可以编写将使用多个处理器的程序。由于GIL锁,您无法使用线程来执行此操作,但是可以使用其他进程来执行。要么:
您可以阅读有关python中的多线程和一般线程的信息
Python中的多线程:http : //www.devshed.com/c/a/Python/Basic-Threading-in-Python/
如果我对事情的理解正确,Python就有一个叫做GIL(全局解释器锁)的东西,当在Python中执行多个线程时,它实际上无法利用多核。
参见Guido van Rossum关于该主题的博客条目。据我所知,在“主流”语言中,只有C / C ++和Java有效地支持多核。
如果您没有Python 2.6(例如,在使用Ubuntu Edgy或Intrepid时则没有),则可以使用Google代码反向移植的多处理版本。它是PyPI的一部分,这意味着您可以使用EasyInstall轻松安装它(这是Ubuntu中python-setuptools软件包的一部分)。