<blockquote>
<p>1) Do Python, Ruby, or Haskell support true multithreading?</p>
</blockquote>
<p>这与语言无关。这是一个硬件问题(如果机器只有一个CPU,那么在物理上根本不可能同时执行两条指令)、操作系统(同样,如果操作系统不支持真正的多线程,那就无能为力)和语言实现/执行引擎的问题。</p>
<p>除非语言规范明确禁止或强制执行真正的多线程,否则这与语言完全无关。</p>
<p><em>所有</em>您提到的语言,加上迄今为止在答案中提到的所有语言,都有多个实现,其中一些支持真正的多线程,一些不支持,还有一些构建在<em>其他</em>执行引擎之上,这些执行引擎可能支持真正的多线程,也可能不支持真正的多线程。</p>
<p>以鲁比为例。下面是它的一些实现及其线程模型:</p>
<ul>
<li>MRI:绿色线程,没有真正的多线程</li>
<li>YARV:OS线程,没有真正的多线程</li>
<li>Rubinius:OS线程,真正的多线程</li>
<li>MacRuby:OS线程,真正的多线程</li>
<li>JRuby:JRuby线程依赖于JVM(如果JVM支持真正的多线程,那么JRuby/XRuby也支持,如果JVM不支持,那么JRuby/XRuby就无能为力了)</li>
<li>IronRuby,Ruby.NET:就像JRuby,XRuby,但是在CLI上而不是在JVM上</li>
</ul>
<p>另请参见<a href="http://StackOverflow.Com/questions/56087/57802/#57802">my answer to another similar question about Ruby</a>。(注意,这个答案已经有一年多的历史了,有些已经不准确了。例如,Rubinius现在使用真正并发的本机线程,而不是真正并发的绿色线程。此外,从那时起,出现了几个新的Ruby实现,如BlueRuby、tinyrb、Ruby Go Lightly、Red Sun和SmallRuby。)</p>
<p>类似于Python:</p>
<ul>
<li>CPython:本机线程,没有真正的多线程</li>
<li>PyPy:本机线程,取决于执行引擎(PyPy可以本机运行,也可以在JVM上运行,或者在CLI上运行,或者在另一个Python执行引擎上运行。只要底层平台支持真正的多线程,PyPy也会支持。)</li>
<li>Unladen Swallow:本机线程,目前没有真正的多线程,但计划修复</li>
<li>Jython:JVM线程,参见JRuby</li>
<li>IronPython:CLI线程,参见IronRuby</li>
</ul>
<p>对于Haskell,至少光荣的Glasgow Haskell编译器支持使用本机线程的真正多线程。我不知道UHC,大型强子对撞机,JHC,YHC,拥抱或者其他的。</p>
<p>对于Erlang,<em>BEAM和HiPE都支持使用绿色线程的真正多线程。</p>
<blockquote>
<p>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)?</p>
</blockquote>
<p>再次重申:这取决于虚拟机、操作系统和硬件。另外,上面提到的一些实现甚至没有虚拟机。</p>