gpt4 book ai didi

multithreading - 在 erlang nif 中创建脏线程

转载 作者:行者123 更新时间:2023-12-03 12:53:46 24 4
gpt4 key购买 nike

我有点困惑,当我创建一个脏 NIF(例如,通过在其 ErlNifFunc 条目中为脏 NIF 设置适当的标志值)时,这会创建一个在脏线程上运行的脏调度程序。

我知道我只能有 N 个 cpu-bond 脏线程作为 N 个 cpu 核心的数量。但是,还有 enif_thread_create功能。

它们有什么区别?我可以使用 enif_thread_create 创建的线程数是否有限制?它们也会是脏线程吗?我希望有一个通过 enif_thread_create 使用脏线程的简单代码示例。

最佳答案

当您将 NIF 定义为脏时,您是在告诉 VM 仅通过脏调度程序执行它。您不是在创建肮脏的调度程序;只有 VM 会这样做。

默认情况下,VM 会为您提供 N 个脏 CPU 调度器,其中 N 是正常调度器的数量。普通调度程序的数量默认为系统上配置的逻辑处理器的数量。如 erl man page 中所述,可以通过各种命令行选项控制正常和脏调度器的数量。

enif_thread_create function提供对底层操作系统的线程创建功能的访问。这个函数在脏 NIF 和调度器之前就存在了,本质上也存在于普通 NIF 之前,因为它只是 erl_drv_thread_create function 的包装器。 ,它已经成为驱动程序 API 的一部分很长一段时间了。这些线程独立于调度程序线程,因此与 NIF 调度无关。相反,它们更像是常规 C 或 C++ 程序可能创建和使用的线程。换句话说,Erlang 运行时使用调度程序线程来运行 Erlang 作业,包括通过脏调度程序进行的脏作业,而您的内部 NIF 或驱动程序代码可以使用它通过 enif_thread_create 创建的线程。或 erl_drv_thread_create用于(大部分)独立于 Erlang 运行时运行的作业。您可以通过这些函数创建的最大线程数受底层操作系统的限制。

关于multithreading - 在 erlang nif 中创建脏线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63551689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com