Как новичок, я пытаюсь понять, как работают актеры. И, из документации, я думаю, я понимаю, что актеры - это объекты, которые выполняются в режиме синхронизации, а также то, что выполнение актера может содержать вызовы метода блокировки/синхронизации, например. db запросы
Но я не понимаю, что если вы напишете актера, у которого есть блокирующие вызовы внутри (например, выполнение блокирующего запроса), это испортит весь пул потоков (в том смысле, что использование процессора будет вниз и т.д.), правильно? Я имею в виду, что, по моему мнению, JVM не может понять, может ли он переключить этот поток на кого-то другого, если/когда актер делает блокирующий вызов.
Итак, учитывая природу concurrency, не должно ли быть очевидно, что актеры не должны делать никаких блокирующих вызовов, когда-либо?
Если это так, каков рекомендуемый способ выполнения неблокирующего/асинхронного вызова, скажем, вызов веб-службы, который извлекает что-то и отправляет сообщение другому игроку, когда этот запрос будет завершен? Если мы просто используем что-то вроде актера:
будущая карта {response = > x! response.body}
Это правильный способ справиться с этим?
Поблагодарили бы, если вы сможете это разъяснить мне.