7

我正在编写一个并发程序,我需要知道系统的核心数量,这样程序就会知道要打开多少个进程。是否有命令可以在 Erlang 代码中获取此信息?

谢谢。

4

4 回答 4

12

您可以使用

erlang:system_info(logical_processors_available)

获取 erlang 运行时系统可以使用的内核数。

于 2012-08-21T10:02:31.283 回答
10

还有:

erlang:system_info(schedulers_online)

它告诉您实际运行了多少调度程序线程。

于 2012-08-21T12:28:18.990 回答
1

要获取可用内核的数量,请使用以下logical_processors标志erlang:system_info/1

1> erlang:system_info(logical_processors).
8

这个有两个伴随标志:logical_processors_online显示有多少正在使用,并logical_processors_available显示有多少可用(unknown当所有可用的逻辑处理器都在线时,它将返回)。

要知道如何并行化您的代码,您应该依赖schedulers_onlinewhich 将返回当前 VM 实例中可用的实际 Erlang 调度程序的数量:

1> erlang:system_info(schedulers_online).
8

但是请注意,仅对这个值进行并行化可能还不够。有时您运行的其他进程需要一些 CPU 时间,有时您的算法将受益于更多的并行性(例如等待 IO)。经验法则是使用从获得的值schedulers_online作为并行度的乘数,但始终使用不同的乘数进行测试,以查看最适合您的应用程序的值。

于 2018-04-24T13:23:03.610 回答
0

如何公开这些信息将是非常特定于操作系统的(当然,除非您碰巧正在编写操作系统)。

你没有说你正在使用什么操作系统。在 Linux 的情况下,您可以从 /proc/cpuinfo 获取数据,但是在超线程的含义和使用共享 L2 缓存的同一裸片上的多个内核问题上存在一些微妙之处(实际上,您有一个 NUMA 架构)。

于 2012-08-21T09:41:57.717 回答