Актеры scala против потоков и блокировка ввода-вывода

Насколько я понимаю, акторы - это в основном легкие потоки, реализованные поверх потоков, запускающие многие акторы в небольшом пуле общих потоков.

В этом случае использование блокирующих операций в акторе блокирует базовый поток. Это не проблема правильности, потому что библиотека акторов будет порождать больше потоков по мере необходимости (верно?), Но тогда вы получите много-много потоков, что в первую очередь сводит на нет пользу от использования акторов.

Учитывая это, как работают акторы, когда вам нужно выполнять такие операции ввода-вывода? Существуют ли операции, которые «блокируют актора», приостанавливая действия актора, позволяя потоку перейти к другим операциям (подобно тому, как операции блокировки приостанавливают поток, позволяя процессору перейти к другим операциям), или все написано на CPS с цепочкой актеры? Или акторы просто не подходят для такого рода длительных операций?

Предыстория: у меня есть опыт написания многопоточного материала классическим способом и я довольно хорошо понимаю, как работают CPS / циклы событий, но у меня нет абсолютно никакого опыта работы с актерами. , и просто хочу понять на высоком уровне, как они подходят, прежде чем я углублюсь в код.

18
задан Li Haoyi 24 January 2012 в 04:34
поделиться