Ray Remote работают в разных «процессах». Это означает, что когда вы запускаете 4 разных удаленных вызова, у него будет другое адресное пространство (поэтому то, что вы делаете в своем коде, в основном не так полезно). Под сериализацией подразумевается, что когда вы вызываете f.remote
с аргументом i
, объект i (который является вашим аргументом) должен быть сериализован, поскольку он будет отправлен другим процессам (чтобы Ray поддерживал распараллеливание). Рэй делает этот процесс очень быстрым, используя разделяемую память для больших объектов.
Также, если вы хотите иметь общие состояния, вы можете использовать актеров (https://ray.readthedocs.io/en/latest/actors.html). Когда вы используете актера, вам не нужно заботиться о безопасности потоков, потому что обновления состояния для акторов происходят в том порядке, в котором вызывается актер.