用越来越流行的语言重建线程和并发知识

2024-09-28 12:13:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我主要是一名Java开发人员,我已经阅读了很多关于线程和并发的深入研究。许多非常聪明的人(douglea,briangoetz,等等)都写了关于这些主题的书,并为Java的新并发库做出了贡献。在

当我开始更多地了解Python、Ruby和其他语言时,我想知道:是否必须为这些语言重新创建所有这些工作?在

是否会有或需要有一个“Python的Doug Lea”或“Ruby的Brian Goetz”对这些语言的并发特性做出类似的贡献?在

在Java中完成的所有并发工作都必须为将来的语言重新创建吗?或者用Java所做的工作会为将来的语言建立经验和指导吗?在


Tags: 语言主题开发人员特性java贡献线程ruby
3条回答

你在谈论java的基本原理之前,都在讨论java的基本原理。这个java.util.concurrent这个库类似地是从以前关于并发编程的代码和研究论文中派生出来的。在

但是,有些实现问题是Java特有的。它有一个指定的内存模型,并且Java中的并发实用程序是根据这个模型的具体情况而定制的。经过一些修改,可以将它们移植到具有不同内存模型特性的其他语言/环境中。在

因此,您可能需要一本书来教您在其他语言中并发工具的规范用法,但这并不是在重新发明轮子。在

请记住,线程只是处理“并发”的几种可能模型之一。例如,Python在Twisted中有一个最高级的异步(基于事件)非线程模型。非阻塞模型非常强大,并且在大多数最高规模的应用程序(例如nginx、lighttpd)中被用作线程的替代品。在

您认为其他流行语言需要线程的假设可能只是以java为中心(因此也是以线程为中心)的世界观的一个症状。请看一下C10K页面,了解一些关于如何处理大量并发请求的模型,这些模型有点过时,但信息量很高。在

我认为答案是肯定和否定。java可以说是最常用的命令语言(java、C++、python、Ruby等)中最明确的内存模型和执行语义。从某种意义上说,其他语言要么完全缺乏这一点,要么正在迎头赶上(如果考虑到线程模型的不成熟,这是可能的)。在

C++可能是一个显著的例外——它为C++ 0x踩下了同样的基础,并且可能超出了我印象中的java模型的当前状态。在

我说不,因为社区不是孤立的。很多从事这方面工作的人都涉及到不止一种语言(至少从指导的角度来看,如果不是直接参与规范的话)。因此,在JMM上工作的人和C++的X规范上的人之间存在很多串扰,因为它们基本上解决了许多与底层驱动程序相同的问题(从底层的硬件人员和顶部的用户)。我很确定JVM/CLR阵营之间也存在某种程度的串扰。在

正如其他人提到的,还有其他并发模型:Erlang和Scala中的actors,Clojure的agents/STM,FP在F#中的崛起,Scala,Haskell,CLR land中的CCR和PLINQ等。现在是一个激动人心的时刻!我们可以使用尽可能多的并发专家。。。。:)

相关问题 更多 >

    热门问题