“无法处理热插拔的CPU”-实施问题

时间:2019-05-20 14:10:08

标签: c++ grpc

我正在使用gRPC库,并且有很多“无法处理热插拔的CPU”日志。我很困惑,因为此日志的条件(https://github.com/grpc/grpc/blob/master/src/core/lib/gpr/cpu_linux.cc#L74)将调用线程在其上运行的实际CPU与操作系统已配置的处理器数量进行了比较。他们为什么要这样做?这是检测热插拔CPU的正确方法吗?

if (static_cast<unsigned>(cpu) >= gpr_cpu_num_cores()) {
    gpr_log(GPR_ERROR, "Cannot handle hot-plugged CPUs");
    return 0;
  }

1 个答案:

答案 0 :(得分:1)

  

他们为什么要这样做?

是一个很难正确回答的问题。现在

  

这是检测热插拔CPU的正确方法吗?

很简单-并非如此,但函数的目标并非如此。编写整个代码的前提是在运行时CPU的数量不变的情况下进行的,这种简单的测试仅告诉您违反了该假设。 (并且将返回的数字重置为零,可能不会因CPU编号索引的某个数组而失效?)

我希望您的下一个问题可能是

  

为什么他们假定CPU数量不变?

可能是因为它更容易实现,而且没有人提供没有此限制的改进版本?您可以自由地制作一个...:-)