哪些高级编程语言支持多线程?

16

我想知道哪些语言支持(或不支持)本地多线程,并可能获得有关实现的一些细节。希望我们能够提供有关此特定功能的完整概述。


这不是语言问题,而是实现问题。由于问题没有意义,我建议它应该从实现方面解读。 - Marcin
我同意Marcin的观点,应该考虑到实现方面。我这样问的原因是我假设大多数语言都可以在不同的实现之间并行化。例如,无论使用哪个编译器,C和C++都有线程。 - bmdhacks
15个回答

7

Erlang内置支持并发编程

严格来说,Erlang进程是绿色线程。但该语言和虚拟机从头开始设计以支持并发。该语言具有特定的控制结构,用于异步进程间消息传递。

在Python中,greenlet是一个第三方包,提供轻量级线程和基于通道的消息传递。但与Erlang相比,它不堪一击。


4

3

旧版本的C和C++(即C89,C99,C++98和C++03)在核心语言中完全没有支持,尽管诸如POSIX线程之类的库可用于今天普遍使用的每个平台。

C11和C++11是最新版本的C和C++,它们在语言中具有内置的线程支持,但这是C11的一个可选功能,因此像单核嵌入式系统这样的实现可以选择不支持它,同时支持C11的其余部分,如果他们希望的话。


1
在C++11中,这不再是真的。 - Max Beikirch
@MaxBeikirch:谢谢,这是5.5年前写下这个答案时的真实情况,当时还没有C++11 :)。 - Adam Rosenfield
当然可以 :) 现在你的回答是正确的,我可以点赞它 ;) - Max Beikirch

3

使用CPython时,需要记住GIL。简而言之:即使在多处理器计算机上,仅使用一个处理器。正如评论中所示,有多种解决方法。


这并不是真的。Ruby和Python有多个实现支持真正的并行线程:XRuby、Ruby.NET、JRuby、IronRuby、Jython、IronPython,可能还有其他的。 - Jörg W Mittag
更正了我最初过于泛泛的陈述。 - Adriano Varoli Piazza

2

Delphi/FreePascal同样支持线程。

从其他答案中可以得知,该功能仅在Windows平台上本地支持。

一些很好的库实现了更好的TThread对象功能:


2
Clojure是一种新兴的Lisp方言,专门设计用于良好处理并发性能问题。它具有函数式API、各种不可变数据结构的高效实现,以及代理系统(类似于Scala中的actors和Erlang中的进程)。甚至还拥有软件事务内存。总的来说,Clojure致力于帮助您编写正确的多线程和并发代码。

1
我相信官方的Squeak VM不支持本地(操作系统)线程,但Gemstone版本支持。
(如果有错误,可以随意编辑)。

1

在这个上下文中,您需要定义“本地”。

Java声称具有某种内置的多线程功能,但实际上只是基于粗粒度锁定和一些库支持。目前来看,它并不比使用POSIX线程的C语言更“本地”。下一个版本的C++(0x)也将包括一个线程库。


1

我知道Java和C#支持多线程,而下一个版本的C++将直接支持它...(计划中的实现已经作为boost.org库的一部分提供...)


C#的多线程API很蠢。有三种方法可以实现,但没有一种是完美的。简单的方法可以工作,除非你需要从线程中返回结果。获取结果的方法更加复杂,而且在概念上也不同(我现在不记得API名称了,抱歉)。 - akauppi

1

Boost::thread非常好用,但我不确定是否可以说它是语言的一部分。这取决于你是否认为CRT/STL/Boost是C++的“一部分”还是可选的附加库。

(否则几乎没有一种语言具有本地线程,因为它们都是操作系统的功能)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接