Я знаю, что вызов синхронного метода приведет к блокировке, но мне нужно понять, как именно эта блокировка происходит в архитектуре актера.
На мой взгляд, их два. возможности:
- Цикл событий в потоке актера вытесняется.
- Асинхронный актер Ray работает в потоке, в котором находится цикл событий asyncio.
- При вызове синхронного метода диспетчер Рэя вызывает метод синхронизации непосредственно для него. тот же поток, фактически приостанавливая цикл событий и запуская метод синхронизации.
- После завершения метода синхронизации цикл событий возобновляется.
- Это означает, что метод синхронизации блокирует поток, прерывая выполнение цикла событий.
- Цикл событий сам выполняет синхронный метод
- Синхронный метод каким-то образом оборачивается как сопрограмма/Future/Task и ставится в очередь задач цикла событий.
- Цикл событий подхватывает его и выполняет в рамках обычного потока.
- Блокирующее поведение метода синхронизации приводит к зависанию самого цикла событий до тех пор, пока не метод синхронизации завершается.
- Это означает, что блокировка происходит «внутри» цикла событий, а не как внешнее прерывание.
Подробнее здесь: https://stackoverflow.com/questions/796 ... nc-methods