多处理器编程和多核编程有什么区别?最好在python中展示如何编写用于多道程序设计和多核编程的小程序的例子
没有"多处理器"或"多核"编程这样的东西."多处理器"和"多核" 计算机之间的区别可能与您作为应用程序员无关; 它与内核如何共享内存访问权限的细微差别有关.
为了利用多核(或多处理器)计算机,您需要一个以可以并行运行的方式编写的程序,以及一个允许程序实际在多个核上并行执行的运行时(和操作系统,虽然您可以在PC上运行的任何操作系统都可以执行此操作.这实际上是并行编程,尽管并行编程有不同的方法.与Python相关的是多处理和多线程.
在C,C++,Java和C#等语言中,您可以通过执行多个线程来编写并行程序.CPython和PyPy运行时的全局解释器锁定排除了此选项; 但仅适用于那些运行时.(在我个人看来,多线程是危险和棘手的,Python通常会鼓励你不要将它视为获得性能优势的一种方式.)
如果你想编写一个可以在Python中运行多个核心的并行程序,你有几个不同的选择:
使用该threading
模块编写多线程程序并在IronPython或Jython运行时中运行它.
使用该processing
模块(现在包含在Python 2.6中作为multiprocessing
模块),一次在多个进程中运行您的代码.
使用该subprocess
模块运行多个python解释器并在它们之间进行通信.
使用Twisted和Ampoule.这样做的好处是,不仅可以跨不同的进程运行代码,而且(如果您不共享对文件之类的内容的访问权限)也可能跨越不同的计算机.
无论您选择哪种选项,您都需要了解如何将您的程序正在进行的工作拆分为有意义的分块.由于我不确定您正在考虑编写什么类型的程序,因此很难提供有用的示例.
正如在另一篇文章中所提到的,Python 2.6具有多处理模块,它可以利用多个核心/处理器(通过透明地启动多个进程来绕过GIL).它提供了一些类似于线程模块的原语.您可以在文档页面中找到一些(简单)用法示例.
您实际上可以编写将使用多个处理器的程序.由于GIL锁定,您无法使用线程执行此操作,但您可以使用不同的进程执行此操作.或者:
使用 子进程模块,并划分代码以执行每个处理器的进程
看一下 parallelpython模块
如果使用python> 2.6,请查看多进程模块.