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



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

我听说有些编程语言天生就是我想要的,它们的范式是以并行(并发、多线程、多处理)的方式看待手头的问题,并提供语言级别的工具和结构来并行实现任务(例如Erlang有process作为语言结构的概念?)。

我喜欢一种具有类似Scala的类型系统的语言。。。我非常了解PHP,我曾经用C/C++做过很多编码。我对Scala和Java有一定的了解,我会读Haskell,但我并不特别精通它。我非常熟悉函数范式,我愿意学习更多。我还对关于并行/并发的高级理论讨论感兴趣。

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

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

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

很难知道你在寻找什么——你的问题相当宽泛——但你提到的任何语言(除了PHP?)都可以让你利用计算机中的多个CPU。选择几个重点关注,期望花几年时间学习并努力。

最新更新