【发布时间】:2010-12-27 14:35:13
【问题描述】:
我们计划用任何一种非常高级的编程语言编写一个高度并发的应用程序。
1) Python、Ruby 或 Haskell 是否支持真正的多线程?
2) 如果程序包含线程,虚拟机是否会自动将工作分配给多个内核(如果主板上有超过 1 个 CPU,则分配给物理 CPU)?
真正的多线程 = 多个独立的执行线程利用多个内核提供的资源(不仅仅是一个内核)。
假多线程 = 线程模拟多线程环境,不依赖任何本机操作系统功能。
【问题讨论】:
-
“真”多线程?那是什么意思?请定义“真正的”多线程。
-
真正的多线程 = 多个独立的执行线程利用多核提供的资源(不仅仅是 1 个核)
-
@S.Lott:完成,我已经更新了原帖
-
现在你已经更新了你的问题,我什至更多对你在“真”和“假”多线程之间的区别感到困惑。例如,BEAM Erlang VM 跨多个 CPU 和多个内核调度 Erlang 线程。因此,根据您的定义,BEAM 支持真正的多线程。但是,BEAM 不以任何方式依赖本机操作系统功能;事实上,它实际上可以在没有任何操作系统的情况下在裸硬件上运行。因此,根据您的定义,BEAM 不支持真正的多线程,而是支持假多线程。它是哪一个?这个定义是没有用的。
-
BEAM 具有如此令人难以置信的可扩展性的全部原因是因为它不依赖于重量级、臃肿、缓慢的操作系统线程,而是实现了自己的线程。例如,Linux 线程在 32 位机器上是 4 或 8 KiBytes,而在 64 位机器上是 8 或 16 KiBytes。我相信 Windows NT 线程是 12 KiBytes。 BEAM 大约 300 字节。 32 位 Linux 可以轻松处理数万个线程。大约 800000 它只会耗尽内存,至少在 32 位系统上是这样。我看到在 Linux 上运行的 BEAM 在一个不太强大的上网本上处理了 100 万个线程,同时进行了演示。
标签: python ruby concurrency haskell multithreading