Oscar 内部实现#

Oscar 支持多种后端,包括 Mars 自己以及 Ray。

Mars 后端#

对于 Mars 后端,每个 worker 启动的时候会创建主进程和若干子进程,每个进程包含一个时间循环。每个进程在 Mars 里被称为 actor pool。

../../_images/oscar-mars.png

每个 actor 可以和另一 actor 通信而不需要考虑它们是在同一个进程,亦或是同一个机器,还是在不同机器。底层的通信使用称为 channel 的概念。

如图所示,每个进程启动的时候,socket 服务能接受来自其他 worker 的 channel 连接,unix socket 服务能接受来自其它进程的 channel 连接,dummy 服务用来接受本进程的 channel 连接。一个消息从一个 actor 发往另一个 actor 的时候,会根据他们的地址选择正确的 channel 类型。

Ray 后端#

对于 Ray 后端,Mars actor pool 在 Ray 的 actor 中创建,通过 Ray 调用实现的 channel 会用来做 Mars actor 之间的消息传递。

../../_images/oscar-ray.png