4

我想认真开始现实世界中的多线程/并行/并发编程。我的意思是喜欢尝试并行和并发地解决实际问题,而不仅仅是学习pthreador MPI、锁、竞争等或学术教科书示例的低级细节。关于并行编程的低级机制,实际上我宁愿对它们一无所知,而只是坚持使用更像 Actor 模型的东西:)。

我听说一些编程语言本质上就像我正在寻找的那样,它们的范式是以并行(并发、多线程、多处理)的方式看待手头的问题,并提供语言级别的工具和结构来实现并行任务(例如,Erlang 有process一个语言结构的概念?)。

我喜欢一种具有像 Scala 这样的类型系统的语言……我非常了解 PHP,并且我曾经用 C/C++ 编写过很多代码。我有 Scala 和 Java 的工作知识,我可以阅读 Haskell,但我不是特别精通它。我对函数式范式非常熟悉,我愿意学习更多。我也对有关并行/并发性的高级理论讨论感兴趣。

4

1 回答 1

2

我想先提一下并行!=并发。它们是密切相关的概念,但并行计算与并发计算的区别在于并行控制流同时发生,而并发可能是交错的,但也可能是并行的。一根细毛要分开,但要理解这一点很重要。

... 提供语言级别的工具和结构来并行执行任务(例如,Erlang 有一个将进程作为语言结构的概念?)。

Erlang 的“进程”是一个轻量级的、内存隔离的绿色线程。该语言不提供共享内存结构;数据通过“消息”在并发控制流之间传递。通知被称为“并发”。Erlang 被明确设计为一种并发语言,而且它恰好会并行调度一些控制流——将 1:1 映射到进程上。Erlang没有给你明确的调度控制,这与线程模型不同。

很难知道你在寻找什么——你的问题相当广泛——但你提到的任何语言(也许 PHP 除外?)都可以让你利用计算机中肯定存在的多个 CPU。选择几个专注于,期望花几年的时间学习并坚持下去。

于 2013-08-26T06:26:28.850 回答