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

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

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

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

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

… provide language level tools and constructs to implement the task in parallel (e.g. Erlang has a concept of process as a language construct?).

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

很难知道你在寻找什么 – 你的问题相当广泛 – 但是你提到的任何语言(除了PHP?)都会允许你利用肯定存在于你计算机中的多个CPU.选择几个专注,期望花几年时间学习并去做.

点赞