Python,Ruby,Haskell-它们提供真正的多线程吗?

2024-05-19 01:45:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我们计划用任何一种高级编程语言编写一个高度并发的应用程序。

1)Python、Ruby或Haskell支持真正的多线程吗?

2)如果程序包含线程,虚拟机是否会自动将工作分配给多个内核(如果主板上有多个CPU,则分配给物理CPU)?

真正的多线程=多个独立的执行线程利用多个核心(而不仅仅是一个核心)提供的资源。

假多线程=线程模拟多线程环境,而不依赖任何本机操作系统功能。


Tags: 程序应用程序利用核心高度haskell物理资源
3条回答

如果使用-threaded选项进行编译,然后在运行时传递+RTS -N<x> -RTS,其中<x>=所需的操作系统线程数,则GHC编译器将在多个操作系统线程上运行程序(从而在多个内核上运行程序)。

Haskell实现GHC支持在共享内存多核上并行执行的多种机制。这些机制在“Runtime Support for Multicore Haskell”中描述。

具体来说,Haskell运行时将工作划分为N个OS线程,分布在可用的计算核心上。这些N个OS线程依次运行M个轻量级Haskell线程(有时是数百万个)。反过来,每个Haskell线程可以为一个spark队列工作(可能有数十亿个spark)。就像这样: enter image description here

运行时计划在单独的核心上执行工作、迁移工作和负载平衡。垃圾收集器也是一个并行的,使用每个核心来收集堆的一部分。

与Python或Ruby不同,GHC没有全局解释器锁,因此,出于其他原因,相比之下,GHC在mulitcore上特别好,例如Haskell v Python on the multicore shootout

1) Do Python, Ruby, or Haskell support true multithreading?

这与语言无关。这是一个硬件问题(如果机器只有一个CPU,那么在物理上根本不可能同时执行两条指令)、操作系统(同样,如果操作系统不支持真正的多线程,那就无能为力)和语言实现/执行引擎的问题。

除非语言规范明确禁止或强制执行真正的多线程,否则这与语言完全无关。

所有您提到的语言,加上迄今为止在答案中提到的所有语言,都有多个实现,其中一些支持真正的多线程,一些不支持,还有一些构建在其他执行引擎之上,这些执行引擎可能支持真正的多线程,也可能不支持真正的多线程。

以鲁比为例。下面是它的一些实现及其线程模型:

  • MRI:绿色线程,没有真正的多线程
  • YARV:OS线程,没有真正的多线程
  • Rubinius:OS线程,真正的多线程
  • MacRuby:OS线程,真正的多线程
  • JRuby:JRuby线程依赖于JVM(如果JVM支持真正的多线程,那么JRuby/XRuby也支持,如果JVM不支持,那么JRuby/XRuby就无能为力了)
  • IronRuby,Ruby.NET:就像JRuby,XRuby,但是在CLI上而不是在JVM上

另请参见my answer to another similar question about Ruby。(注意,这个答案已经有一年多的历史了,有些已经不准确了。例如,Rubinius现在使用真正并发的本机线程,而不是真正并发的绿色线程。此外,从那时起,出现了几个新的Ruby实现,如BlueRuby、tinyrb、Ruby Go Lightly、Red Sun和SmallRuby。)

类似于Python:

  • CPython:本机线程,没有真正的多线程
  • PyPy:本机线程,取决于执行引擎(PyPy可以本机运行,也可以在JVM上运行,或者在CLI上运行,或者在另一个Python执行引擎上运行。只要底层平台支持真正的多线程,PyPy也会支持。)
  • Unladen Swallow:本机线程,目前没有真正的多线程,但计划修复
  • Jython:JVM线程,参见JRuby
  • IronPython:CLI线程,参见IronRuby

对于Haskell,至少光荣的Glasgow Haskell编译器支持使用本机线程的真正多线程。我不知道UHC,大型强子对撞机,JHC,YHC,拥抱或者其他的。

对于Erlang,BEAM和HiPE都支持使用绿色线程的真正多线程。

2) If a program contains threads, will a Virtual Machine automatically assign work to multiple cores (or to physical CPUs if there is more than 1 CPU on the mainboard)?

再次重申:这取决于虚拟机、操作系统和硬件。另外,上面提到的一些实现甚至没有虚拟机。

相关问题 更多 >

    热门问题