CHA*_*APa 14 erlang multithreading scala multicore
我一直在阅读很多关于Scala和Erlang如何处理轻量级线程及其并发模型(actor)的内容.
但是,我有疑虑.
Scala和Erlang是否使用类似于Java(绿色线程)使用的旧线程模型的方法?
例如,假设有一个具有2个内核的机器,那么Scala/Erlang环境将为每个处理器分叉一个线程?其他线程将由用户空间(Scala VM/Erlang VM)环境调度.它是否正确?
在引擎盖下,这是如何工作的?
Chr*_*ian 24
Erlang正在使用用户空间多任务处理,任务一直运行直到它们被阻止或者直到他们用完了"减少"的份额.减少被模糊地定义为计算单位.
直到SMP调度程序,只有一个内核线程采用可运行的任务.使用SMP调度,您可以使用多个内核线程来执行任务,从而在多核计算机上并行执行代码.调度程序线程的数量应与核心数相匹配.请参阅erl联机帮助页中的-smp [enable|auto|disable]开关.
还有一个内核线程池供可加载驱动程序执行阻塞系统调用.这称为异步线程池.见+A size在该ERL手册页.
进一步阅读