multithreading - 并发: Processes vs Threads

标签 multithreading process erlang otp

使用基于多个流程的并发模型的主要优势是什么
基于线程,后者在什么情况下合适?

最佳答案

容错和可伸缩性是使用“进程与线程”的主要优点。

依赖共享内存或仅在使用线程时可用的某种其他技术的系统,在要在多台计算机上运行该系统时将无用。迟早您将需要在不同的流程之间进行交流。

例如,在使用进程时,您不得不通过消息来处理通讯,这就是Erlang处理通讯的方式。不共享数据,因此没有数据损坏的风险。

进程的另一个优点是它们可能崩溃,并且您可以重启(即使跨网络主机),因此您会感到相对安全。但是,如果线程崩溃,则可能会使整个过程崩溃,这可能会导致整个应用程序崩溃。举例说明:如果Erlang进程崩溃,则只会丢失该电话或Web请求等。不会丢失整个应用程序。

综上所述,OS进程还具有许多缺点,这些缺点可能会使它们变得更难使用,例如,需要永久地产生一个新进程这一事实。但是,Erlang拥有自己的过程概念,这些过程非常轻量级。

话虽如此,这个讨论实际上是研究的主题。如果您想了解更多细节,可以阅读Joe Armstrong关于容错系统的论文1,它对Erlang及其驱动原理进行了很多解释。

关于multithreading - 并发: Processes vs Threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4315292/

相关文章:

c# - .NET 等同于 Java 线程组?

java - Swing:当 JTree 更新时间过长并卡住其他 GUI 元素时该怎么办?

c# - 以管理员身份启动进程,不使用 UseShellExecute?

java - 如何使用Java的ProcessBuilder.start()暂停进程运行?

apache - 在哪里放置 SSL 加密、Apache HTTP 或 Webapp

java - 从另一个线程更新 JLabel

Java线程停止没有异常

Java进程 "The pipe has been ended"问题

ssl - 如何使用 Erlang 发出 HTTPS 请求?

erlang - 获取有效 system_info 原子的完整列表