Concurrency 如果能够并行执行的进程很少,那么能够高效地生成几十个进程又有什么意义呢?

Concurrency 如果能够并行执行的进程很少,那么能够高效地生成几十个进程又有什么意义呢?,concurrency,parallel-processing,functional-programming,erlang,Concurrency,Parallel Processing,Functional Programming,Erlang,Erlang在生成新进程方面非常有效,但如果CPU只能并行执行其中的4个进程,那又有什么意义呢 因此,其余部分应该等待Erlang-“上下文切换” 例如,如果使用10k进程,是否比使用Java/C#/C++更快地完成更多事情?原因有很多: 从概念上讲,过程很容易推理。JavaScript等语言中的异步回调和承诺更难解释,因为回调中的代码可以更改线程中其他代码使用的变量值 进程为其内部运行的代码提供隔离。一个进程只能通过在其邮箱中放置消息来影响其他进程。一个进程不能干预其他进程的状态 过程是颗粒

Erlang在生成新进程方面非常有效,但如果CPU只能并行执行其中的4个进程,那又有什么意义呢

因此,其余部分应该等待Erlang-“上下文切换”


例如,如果使用10k进程,是否比使用Java/C#/C++更快地完成更多事情?

原因有很多:

  • 从概念上讲,过程很容易推理。JavaScript等语言中的异步回调和承诺更难解释,因为回调中的代码可以更改线程中其他代码使用的变量值
  • 进程为其内部运行的代码提供隔离。一个进程只能通过在其邮箱中放置消息来影响其他进程。一个进程不能干预其他进程的状态
  • 过程是颗粒状的。这意味着:
    • 如果在4核机器上有400个进程,调度程序将确保以充分利用4核的方式跨线程分发它们。一个内核总是要处理操作系统的东西,因此调度程序很可能最终给运行在该内核上的线程的工作量比其他3个线程少。但是它可以适应,所以在任何情况下,调度器都会尽可能确保进程尽可能少地等待,并且线程总是有一个等待CPU时间的进程队列
    • 转向具有更多内核的更好的硬件不需要更改应用程序的代码或体系结构。将Erlang应用程序从4核机器移动到64核机器将意味着您的应用程序在不做任何更改的情况下运行速度将提高约16倍,前提是您的应用程序的结构能够充分利用额外的核心(通常这意味着确保可以并行完成的任务在单独的流程中执行)
  • 进程非常轻量级,因此开销非常小。在大多数应用程序中,进程和调度程序提供的好处远远超过运行数千个进程所带来的小开销。商品硬件可以轻松处理数十万个进程
总之,进程是否并行执行并不重要。它们提供的其他好处足以证明它们的使用是合理的