multithreading - Erlang 进程如何(如果有的话)映射到内核线程?

标签 multithreading erlang parallel-processing lightweight-processes

Erlang 因能够支持许多轻量级进程而闻名;它可以做到这一点,因为这些不是传统意义上的进程,甚至不是像 P 线程那样的线程,而是完全在用户空间中的线程。

这很好(实际上很棒)。那么 Erlang 线程如何在多核/多处理器环境中并行执行呢?当然,它们必须以某种方式映射到内核线程才能在单独的内核上执行?

假设是这样的话,这是如何完成的?许多轻量级进程是否映射到单个内核线程?

或者有其他方法解决这个问题吗?

最佳答案

答案取决于所使用的虚拟机:

1) 非 SMP:有一个调度程序(操作系统线程),它执行从可运行进程池中获取的所有 Erlang 进程 strong>(即那些没有被 receive 等阻止的人)

2) SMP:有K个调度程序(操作系统线程,K通常是CPU核心数),它从共享进程执行Erlang进程队列。它是一个简单的 FIFO 队列(带有锁以允许多个操作系统线程同时访问)。

3) R13B 及更新版本中的 SMP:将有 K 个调度程序(和以前一样)从多个进程队列执行 Erlang 进程。每个调度程序都有自己的队列,因此将添加从一个调度程序到另一个调度程序的进程迁移逻辑。该解决方案将通过避免共享进程队列中的过度锁定来提高性能。

有关更多信息,请参阅this document由爱立信公司的 Kenneth Lundin 为 2008 年 11 月 13 日在斯德哥尔摩举办的 Erlang 用户大会准备。

关于multithreading - Erlang 进程如何(如果有的话)映射到内核线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/605183/

相关文章:

c++ - std::thread - 逐行读取文件

debugging - 能够从进程 ID 识别进程身份的最佳 erlang 方法是什么?

multithreading - matlab脚本是否可以同时运行两个不同的函数

python - 在 Python 中调用 exit() 时,C++ 析构函数中的互斥锁会导致异常

c - 使用多线程的段错误

c++ - 使用 msgpack 对用户定义的结构进行编码。

erlang - || 有什么作用在 Erlang 中是什么意思?

.net - .NET 4.0中的Parallel.ForEach

c# - 是否有机会用 TPL 替换 while 循环?

java - Android - 在单独的线程上进行 HTTP GET