erlang进程与操作系统线程
erlang多进程与多线程: 在erlang开发中,我们面对的最小执行单位是进程,当然这个进程并不是系统层面上的进程,也不是线程。而是基于erlang运行时系统的一个进程。那么erlang的多进程是如何变成系统级别上的多线程,进而被多核处理器处理呢? 其实,我们每启动一个erlang VM,实际上就启动了模拟器+erlang运行时系统。而每个erlang运行时系统会启动N个进程调度器,每个进程调度器都是一个独立的操作系统线程。这个调度器会处理一个进程池,进程池里面是M个erlang进程。也就是说erlang进程以1:M的方式映射到操作系统线程。 既然每个调度器都是一个操作系统线程,那么可并行运行的erlang进程最多就能有M个。虽然一个进程池内有M个进程,但是同一池内的进程仍像之前所有进程公用一个调度器那样分时运行。 并且在此之上,进程可以在进程池之间迁移以便维持可用调度器上的负载均衡。 erlang程序的单进程与多线程: 每启动一个erlang VM,也就启动了一个进程,该进程包括很多线程,最基本就包括了erlang运行时系统和模拟器所创建的线程。如果在该虚拟机上还运行erlang程序,那么ERTS就有可能为你的应用程序创建了N个线程。这些线程的个数,跟启动erlang VM时设置的参数和自身硬件环境有关