Kum*_*mmo 17 erlang multithreading process erlang-otp
基于一个基于线程的进程使用模型进行并发的主要优点是什么?后者适用于什么情境?
knu*_*tin 18
容错和可伸缩性是使用Processes vs. Threads的主要优点.
如果要在多台计算机上运行系统,依赖共享内存或仅在使用线程时可用的其他技术的系统将毫无用处.迟早你需要在不同的进程之间进行通信.
例如,在使用进程时,您必须通过消息处理通信,这是Erlang处理通信的方式.数据不共享,因此不存在数据损坏的风险.
流程的另一个优点是它们可能崩溃,您可以感觉相对安全,因为您可以重新启动它们(甚至跨网络主机).但是,如果线程崩溃,则可能会导致整个进程崩溃,从而导致整个应用程序崩溃.举例说明:如果Erlang进程崩溃,您将只会丢失该电话或webrequest等,而不是整个应用程序.
说到这一切,操作系统进程也有许多缺点,可能会使它们更难使用,比如它需要永远产生一个新进程.但是,Erlang拥有自己的流程概念,它非常轻量级.
话虽如此,这次讨论确实是一个研究课题.如果你想了解更多细节,你可以给Joe Armstrong关于容错系统的论文1阅读,它解释了很多关于Erlang和驱动它的哲学.
小智 7
使用基于流程的模型的缺点是速度较慢.您必须在程序的并发部分之间复制数据.
使用基于线程的模型的缺点是你可能会弄错.这可能听起来很有意思,但这是真的 - 给我看基于线程的代码,我会告诉你一个bug.我发现线程代码中的错误已经"正确"运行了10年.
使用基于过程的模型的优点很多.分离迫使你在协议和正式的沟通模式方面进行思考,这意味着你更有可能做到正确.彼此通信的进程更容易跨多台计算机扩展.多个并发进程允许一个进程崩溃而不必使其他进程崩溃.
使用基于线程的模型的优点是速度快.
可能很明显我喜欢哪两个,但如果不是:进程,一周中的每一天和周日两次.线程太难了:我从来没有遇到任何可以编写正确的多线程代码的人; 那些声称通常对空间知之甚少的人.