Haskell与Python线程模型对比
我想问的是:Python里的multiprocessing
模块和Haskell中的并行处理有什么区别?比如说:在Python中创建的线程是直接对应到操作系统的线程吗?
如果是这样,那如果线程的数量超过了核心的数量怎么办?这些线程会被分配到操作系统的线程上吗?是谁来安排这些线程的运行?
2 个回答
7
Python的multiprocessing
模块和线程没有关系。它的目的是提供一个和threading
模块相似的接口,但底层是用进程来实现的。
Python的线程是和操作系统的线程对应的。如果你创建的线程数量超过了CPU核心的数量,情况就和在C语言中(比如使用pthreads
或Windows API线程)一样——操作系统会在核心之间切换这些线程。
网上有很多关于Python线程的信息,你可以去搜索一下。
7
和Python不同(可以参考Eli的回答),Haskell的线程模型有很大不同。这里有两个概念:并发和并行。并发是指多个线程同时处理程序的不同部分,而并行则是指多个线程一起加速计算。Haskell使用轻量级线程来处理这两种情况,这些线程由Haskell的运行时系统(RTS)管理。在并行的情况下,可以使用一些简单的命令,比如pseq
和par
,这些命令可以告诉运行时系统,如果这样做能提高效率,就在另一个线程中进行计算。运行时系统会自动决定是否这样做。