这些方法system_info
和system_flag
每次调用其中一个时都会对操作系统进行系统调用吗?或者他们是否使用Erlang虚拟机的存储值?
任务:我正在编写一个应用程序来检查空闲处理器并创建新进程来完成任务。如果这些方法正在进行系统调用,则可能是性能开销。
答案 0 :(得分:3)
函数erlang:system_info
和erlang:system_flag
检查并处理Erlang虚拟机而不是底层操作系统。它们允许您检查系统以查看其运行方式以及在某些方面对其进行控制。 BEAM,erlang虚拟机,是一个复杂的野兽,有很多信息可供使用。另一个有用的功能是process_info
,它允许您获取有关一个过程的信息。
虽然这些函数显然是用C语言编写的,但可以肯定的是,在长时间运行的NIF可能的情况下调用它们不会产生问题。在这种情况下长时间运行意味着超过毫秒。同样重要的是它们被调用的频率以及是否通过相同的过程等。
答案 1 :(得分:2)
函数system_info和system_flag是BIF,它们调用文件erl_bif_info.c中的c代码,这段代码不是NIF,因此调用它们不会导致长时间运行NIF的问题。
NIF被认为是有害的
崩溃的NIF将关闭你的虚拟机。