Multithreading 哪些高级语言支持多线程?
我想知道哪些语言支持(或不支持)本机多线程,也许可以了解一些关于实现的细节。希望我们可以对这个特定功能进行全面的概述。 < P>旧版本的C和C++(即C89、C99、C++ 98和C++ 03)在核心语言中根本没有支持,尽管POSIX线程库在当今普通用户的每个平台上都是可用的。Multithreading 哪些高级语言支持多线程?,multithreading,programming-languages,Multithreading,Programming Languages,我想知道哪些语言支持(或不支持)本机多线程,也许可以了解一些关于实现的细节。希望我们可以对这个特定功能进行全面的概述。 < P>旧版本的C和C++(即C89、C99、C++ 98和C++ 03)在核心语言中根本没有支持,尽管POSIX线程库在当今普通用户的每个平台上都是可用的。 P.最新版本的C和C++、C11和C++ 11确实有内置的线程支持,但它是C11的可选特征,所以如单核嵌入式系统的实现可以选择不支持它,而如果支持C11的其余部分,如果他们想要的话。线程,但宝石版本确实如此 (如果不正
<> P.最新版本的C和C++、C11和C++ 11确实有内置的线程支持,但它是C11的可选特征,所以如单核嵌入式系统的实现可以选择不支持它,而如果支持C11的其余部分,如果他们想要的话。线程,但宝石版本确实如此 (如果不正确,请随意编辑)。您需要在此上下文中定义“本机” Java声称有某种内置多线程,但它只是基于粗粒度锁定和一些库支持。目前,它并不比使用POSIX线程的C更“原生”。下一个版本的C++(0x)也将包含线程库。 < P>我知道java和C++支持多线程,C++的下一个版本将直接支持它。(计划的实施作为boost.org库的一部分提供…和do。Ruby正在开发它,但是Ruby 1.8中的线程并不是真正的线程。很棒,但我不确定你是否可以说它是语言的一部分。这取决于如果你把CRT/STL /Boost看作是C++的一部分,或者是一个可选的附加库。p>
(否则,几乎没有任何语言具有本机线程,因为它们都是操作系统的一项功能)。使用CPython时,必须记住。总而言之:即使在多处理器机器上,也只使用一个处理器。如评论所示,这有多种方法。内置了对的支持 严格地说,Erlang进程是绿色的。但是语言和虚拟机是从头开始设计的,以支持并发性。该语言具有用于异步进程间消息传递的特定控制结构
在Python中,是一个第三方包,提供轻量级线程和基于通道的消息传递。但是它不能与Erlang相提并论。Delphi/FreePascal也支持线程 根据其他答案,我将假设它只在Windows平台上是本机的 在TThread对象之上实现更好功能的一些不错的库:
有使用本机线程的Ruby实现和使用绿色线程的Ruby实现。
有使用本机线程的Python实现和使用绿色线程的Python实现。
甚至还有使用绿色线程的POSIX线程实现,例如旧的LinuxThreads库或GNU pth库
仅仅因为实现使用本机线程并不意味着这些线程实际上可以并行运行;许多实现使用全局解释器锁来确保一次只能运行一个线程。另一方面,使用绿色线程并不意味着它们不能并行运行:例如,BEAM Erlang VM可以跨多个CPU核调度其绿色线程(更准确地说是绿色进程),Rubinius Ruby VM也计划这样做。Perl不支持本机线程 是的,有一个Perl线程模块,是的,它在实现中使用本机平台线程。问题是,它在一般情况下不是很有用 当您使用Perl线程创建新线程时,它会复制Perl解释器的整个状态。这是非常缓慢,并使用大量的内存。事实上,它可能比在Unix上使用fork()慢,因为后者在编写时使用copy,而Perl线程不使用
但一般来说,每种语言都有自己的线程模型,有些不同于其他语言。Python(大部分)使用本机平台线程,但有一个大锁,确保一次只运行一个线程(Python代码)。这实际上有一些好处
线程现在不是已经过时了吗?(想想谷歌Chrome,IE8)我最近为Lua做了一个多线程扩展,名为。它将多线程概念如此自然地融入到语言中,以至于我认为“内置”多线程再好不过了 为了记录在案,Lua的内置协作多线程(coroutines)也可以经常使用。有或没有车道 Lanes没有GIL,每个线程在单独的Lua universes中运行代码。因此,除非您的C库崩溃,否则它不会受到与线程使用相关的问题的影响。事实上,这个概念更像进程和消息传递,尽管只使用了一个操作系统进程。是JVM的一种新兴Lisp方言,专为处理并发而设计 它的特点是一个函数式API,各种不可变数据结构的一些非常有效的实现,以及代理系统(类似于Scala中的参与者和Erlang中的进程)。它甚至还有软件事务内存
总之,Clojure花了很大的时间来帮助您编写正确的多线程和并发代码。最后,
Go
在这里使用多线程和它自己的pkgGoroutine
。
人们说这是在化学需氧量的结构上