Требует ли асинхронность многопоточность или параллелизм? - PullRequest
3 голосов
/ 03 ноября 2010

Или мы можем иметь асинхронный код, который выполняется в том же потоке.

Ответы [ 3 ]

4 голосов
/ 03 ноября 2010

На самом деле, да, вы можете иметь асинхронный код, который выполняется в том же потоке.Большинство базовых операций ввода-вывода в наши дни фактически асинхронные;операции чтения и записи запрашиваются и обрабатываются вне ЦП, когда они завершаются, устанавливается флаг, а затем программа может обращаться к значениям.Программа делает это, периодически проверяя значение флага во время его нормальной обработки и отвечая, когда значение указывает на доступность.Операционная система обычно координирует это для программ более высокого уровня.

Это действительно глупая версия правды, но она достаточно правильна для этого обсуждения.Для получения дополнительной информации, я предлагаю вам начать здесь:

http://en.wikipedia.org/wiki/Asynchronous_I/O

2 голосов
/ 03 ноября 2010

Вы определенно можете написать код, который будет асинхронным, но однопоточным. Примером может быть что-то с несколькими открытыми сокетами, которые используют select и неблокирующий IO для записи небольших коротких вещей для разных «сессий» и разбивают их на куски. Это может определенно быть асинхронным, в зависимости от того, что было отправлено и как это контролировалось.

Вы могли бы делать вещи и без сети, но это, наверное, самый тривиальный пример.

0 голосов
/ 22 ноября 2011

Обычно используется асинхронный JavaScript (используется, например, для веб-служб), но почти весь JavaScript до сих пор был однопоточным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...