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

问题描述 投票:11回答:15

我想知道哪种语言支持(或不支持)本机多线程,也许可以获得有关实现的一些详细信息。希望我们可以对此特定功能提供完整的概述。

multithreading programming-languages
15个回答
6
投票

[Erlang具有对concurrent programming的内置支持。

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

在Python中,greenlet是提供轻量级线程和基于通道的消息传递的第三方程序包。但是,它不能与Erlang进行比较。


1
投票

Boost::thread非常好,我不确定您是否可以说出它在语言中的作用。这取决于您是否将CRT / STL / Boost视为C ++的“一部分”,或者是可选的附加库。

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


1
投票

这个问题没有道理:特定的实现是选择将线程作为本机线程还是绿色线程来实现,与该语言无关,这是内部实现的细节。

[存在使用本机线程的Java实现和使用绿色线程的Java实现。有使用本地线程的Ruby实现和使用绿色线程的Ruby实现。有使用本地线程的Python实现和使用绿色线程的Python实现。甚至有使用绿色线程的POSIX Thread实现,例如旧的LinuxThreads库或GNU pth库。

并且仅仅因为实现使用本地线程并不意味着这些线程实际上可以并行运行;许多实现使用全局解释器锁来确保一次只能运行一个线程。另一方面,使用绿色线程并不意味着它们不能并行运行:例如,BEAM Erlang VM可以跨多个CPU内核调度其绿色线程(更确切地说是绿色进程),Rubinius也计划这样做。 Ruby VM。


1
投票

Perl无法有效地支持本机线程。

是,有一个Perl线程模块,是的,它在其实现中使用本机平台线程。问题是,在一般情况下它不是很有用。

当使用Perl线程创建新线程时,它将复制Perl解释器的整个状态。这非常慢,并占用大量RAM。实际上,它可能比在Unix上使用fork()慢,因为后者使用写时复制,而Perl线程则不。


但是一般而言,每种语言都有其自己的线程模型,有些语言彼此不同。 Python(大多数)使用本机平台线程,但是具有很大的锁,可以确保一次只能运行一次(Python代码)。这实际上具有一些优势。

这些天不是为了支持流程而过时吗? (请考虑使用Chrome浏览器,IE8)


1
投票

我最近为Lua做了一个多线程扩展,称为Lua Lanes。它自然地将多线程概念合并到语言中,以至于我看不到“内置”多线程会更好。

为了记录,通常也可以使用Lua内置的协作多线程(协程)。有无泳道。

Lanes没有GIL,并且每个线程在单独的Lua Universe中运行代码。因此,除非您的C库崩溃,否则它不会受到与线程使用相关的问题的影响。实际上,尽管仅使用一个OS进程,但该概念更像是进程和消息传递。


0
投票

[PerlPython做。 Ruby正在开发它,但是Ruby 1.8中的线程并不是真正的线程。


0
投票

最后,Go在此处具有自己的pkg Goroutine的多线程。人们说这是在C-language的结构上。它也易于使用和理解。


3
投票

我想比Haskell高的语言列表很短,并且对concurrency and parallelism的支持很好。


3
投票

使用CPython,必须记住有关GIL的信息。总结一下:即使在多处理器计算机上,也只使用一个处理器。如注释所示,有多种解决方法。


3
投票

较旧的C和C ++版本(即C89,C99,C ++ 98和C ++ 03)根本不支持核心语言,尽管POSIX线程之类的库几乎可用于该平台中的每个平台。今天的普通用户。

最新版本的C和C ++,C11和C ++ 11确实具有该语言的内置线程支持,但这是C11的可选功能,因此诸如单核嵌入式系统的实现可以选择不支持如果他们愿意的话,还可以支持C11的其余部分。


2
投票

Delphi / FreePascal也支持线程。

从其他答案中,我认为它仅是Windows平台上的本机。

一些在TThread对象之上实现更好功能的漂亮库:


2
投票

Clojure是针对JVM的新兴Lisp语言,它专门设计用来很好地处理并发性。

它具有功能风格的API,各种可变数据结构的某些非常有效实现以及代理系统(Scala中的actor和Erlang中的进程类似)。它甚至具有软件事务存储。

总而言之,Clojure可以极大地帮助您编写正确的多线程和并发代码。


1
投票

我相信官方的吱吱声虚拟机不支持本机(OS)线程,但Gemstone版本支持。

((如果不正确,请随时进行编辑)。


1
投票

您需要在此上下文中定义“本机”。

Java声称某种内置的多线程,但是仅基于粗粒度锁定和某些库支持。这时,使用POSIX线程,它不比C更“本机”。下一版本的C ++(0x)也将包括线程库。


1
投票

[我知道Java和C#支持多线程,而C ++的下一版本将直接支持多线程...(计划的实现可作为boost.org库的一部分获得...]

© www.soinside.com 2019 - 2024. All rights reserved.