前言
这篇文章主要是了解清楚task在C++与python之间是如何配合起来的。ray选择了用cython对核心的c++代码进行封装,所以阅读起来可能没有那么顺畅。
核心代码
// src/ray/common/task/task_spec.cc
// 计算任务所需资源的核心方法
// 处理常规场景:任务有明确的资源需求
// 处理corner case:任务没有资源需求时使用静态nil对象优化性能
void TaskSpecification::ComputeResources() {
auto &required_resources = message_->required_resources();
if (required_resources.empty()) {
// 使用静态nil对象避免每次分配空对象
required_resources_ = ResourceSet::Nil();
} else {
required_resources_.reset(new ResourceSet(MapFromProtobuf(required_resources)));
}
// 处理placement资源,如果没有指定则使用required_resources
auto &required_placement_resources = message_->required_placement_resources().empty()