Я только начал изучать структуру Play в последнее время и действительно нравится это до сих пор. Есть только одна вещь, которая не ясна для меня. Я разработчик Java с блокировкой и многопоточным способом мышления, поэтому асинхронное программирование для меня немного новое.Как проиллюстрировать API асинхронного WS
Таким образом, структура Play использует асинхронный WS API, который не блокирует поток, который вызывает его, ни это блоки или нерестится любую другую нить. При выполнении какого-либо асинхронного программирования обычно у вас есть , чтобы создать новый поток, а затем сделать WS-вызов, чтобы вы не блокировали основной поток. Итак, мой вопрос здесь в том, как API WS для воспроизведения удается выполнить асинхронный вызов веб-службы, не блокируя текущий поток и не создавая новый? Проводит ли он запрос, а затем основной поток каждый раз, в небольших проверках, есть ли ответ в объекте Future? Я знаю, как его использовать, но я хочу знать, что такое сделка под капотом. Как это будет реализовано в Scala? Простым примером, если это было возможно, была бы хорошая помощь.
Спасибо заранее и с наилучшими пожеланиями!
Ну, теперь мне кажется немного более понятным. Просто я не совсем понимаю, как поток, который вызывает обратный вызов, знает, что ответ доступен, если он не заблокирован и не ждет ответа? Проверяет ли он время от времени, если ответ пришел? – localhost
Это немного сложнее, чем это. NIO предоставляет селектора, которые контролируют каналы для событий. Один поток может отслеживать несколько каналов таким образом и отправлять обратные вызовы в threadpool, когда есть данные для обработки. – drexin
@drexin Этот комментарий должен быть частью ответа. – nir