从哪里开始严肃的并发(多线程,并行?)编程

时间:2013-08-26 05:23:42

标签: multithreading scala parallel-processing erlang

我想在现实世界中认真开始多线程/并行/并发编程。我的意思是尝试并行和同时解决真正的问题而不只是了解pthreadMPI,锁,种族等的低级细节或者学术,教科书的例子。关于并行编程的低级机制,事实上我宁愿不了解它们,只是坚持使用更像Actor模型的东西:)。

我听说有些编程语言本身就像我正在寻找的那样,他们的范例是以并行(并发,多线程,多处理)方式查看手头的问题,并提供语言级工具和构造以并行实现任务(例如,Erlang有process作为语言构造的概念吗?)。

我喜欢使用类似Scala类型系统的语言...我非常了解PHP,而且我曾经在C / C ++中做过很多编码。我有Scala和Java的工作知识,我可以阅读Haskell,但我并不擅长它。我对功能范式非常熟悉,我愿意学到更多东西。我也对关于并行/并发的高级理论讨论感兴趣。

1 个答案:

答案 0 :(得分:2)

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

  

...提供语言级工具和构造来并行实现任务(例如,Erlang有一个过程概念作为语言构造吗?)。

Erlang'过程'是一种轻量级,内存隔离的绿色线程。该语言不提供共享内存结构;数据通过'messages'在并发控制流之间传递。通知被称为'并发'。 Erlang被明确地设计为并发语言,并且恰好如此,将安排一些控制流 - 将1:1映射到进程 - 并行。 Erlang不会 让您明确控制调度,这与线程模型不同。

很难知道你在寻找什么 - 你的问题相当广泛 - 但你提到的任何一种语言(除了PHP?)都会让你利用肯定会有的多个CPU你的电脑。选择几个专注,期望花几年时间学习并去做。