![]() |
1
33
这与语言无关。这是一个硬件问题(如果机器只有1个CPU,那么在物理上就不可能同时执行两个指令)、操作系统(同样,如果操作系统不支持真正的多线程,那么您也无能为力)和语言实现/执行引擎。 除非语言规范明确禁止或强制执行真正的多线程,否则这与语言完全无关。 所有 您提到的语言,加上到目前为止答案中提到的所有语言,都有多个实现,其中一些支持真正的多线程,一些不支持,还有一些构建在 其他 可能支持或不支持真正多线程的执行引擎。 以Ruby为例。这里只是 一些 其实现及其线程模型:
也见 my answer to another similar question about Ruby .(请注意,该答案已有一年多的历史,其中一些已不再准确。例如,Rubinius现在使用真正并发的本机线程,而不是真正并发的绿色线程。而且,从那时起,几个 新的 Ruby实现已经出现,如BlueRub、Tinyrb、Ruby Go Lightly、Red Sun和SmallRuby。) 类似于python:
对于haskell,至少光荣的glasgow haskell编译器支持真正的多线程本地线程。我不知道UHC,LHC,JHC,YHC,拥抱或所有其他的。 对于厄尔朗, 二者都 BEAM和HIPE支持真正的绿色螺纹多线程。
再次说明:这取决于虚拟机、操作系统和硬件。另外,上面提到的一些实现,甚至 有 虚拟机。 |
![]() |
2
22
haskell实现(ghc)支持在共享内存多核上并行执行的多个机制。这些机制在 Runtime Support for Multicore Haskell “。
具体来说,haskell运行时将工作划分为N个OS线程,分布在可用的计算核心上。这些N OS线程依次运行m轻量级haskell线程(有时有数百万个)。反过来,每个haskell线程都可以为一个火花队列(可能有数十亿个火花)工作。像这样:
运行时调度工作将在单独的核心上执行,迁移工作和负载平衡。垃圾收集器也是一个并行的,使用每个核心来收集堆的一部分。 与python或ruby不同的是,没有全局解释器锁,因此出于这个原因和其他原因,与之相比,ghc在mulitcore上尤其出色,例如。 Haskell v Python on the multicore shootout |
![]() |
3
16
如果使用
|
![]() |
4
7
Ruby1.9的当前版本(基于yarv-c的版本)具有本机线程,但存在gil问题。我知道python也有gil的问题。 但是Jython和JuRube(露比和Python的成熟Java实现)都提供了本地多线程,没有绿色线程,也没有吉尔。 不知道哈斯克尔。 |
![]() |
5
1
haskell具有线程功能,此外, pure 功能语言-否 side effects |
![]() |
6
1
对于真正的并发性,您可能希望尝试erlang。 |
![]() |
7
1
我选择了二郎。Erlang可以即时支持分布式高并发编程。不管你叫“多线程”还是“多处理”。需要考虑的两个重要元素是并发级别和Erlang处理的事实 不共享 状态。 进程之间没有共享状态是一件好事。 |
![]() |
8
-2
哈斯克尔什么都适合。
蟒蛇
但是我的观点——你能做的最好的方法是为大的和大的事情选择最高级别的可能的静态类型系统语言。今天的语言是:ocaml,haskell,erlang。 如果你想开发小东西-python很好。但是当事情变得更大时,所有的python好处都会被测试的miriad所吞噬。 我没有用红宝石。我仍然认为Ruby是一种玩具语言。(或者至少当你了解python的时候没有理由教ruby——最好是读sicp的书)。 |
![]() |
Stilian · 存储库设置中没有Github页面部分 3 年前 |
![]() |
Kellen · 查看$卷展栏功能列表 3 年前 |
![]() |
Akshit Thakur Ak · 我怎样才能把铁轨停下来? 3 年前 |
![]() |
johncssjs · 将数组转换为每个元素的嵌套哈希 3 年前 |
![]() |
solidsnake99 · Rails db:如何绕过验证 3 年前 |