2016-06-07 4 views
1

Я слышал от человека, что он выбирает асинхронный IO вместо синхронизированного ввода-вывода в дизайне своей системы, потому что будет меньше потоков и потоков дорого.Асинхронный IO уменьшает количество потоков по сравнению с синхронизированным IO?

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

Спасибо.

+1

Проголосовало за закрытие. Какая ОС? Что такое IO, диск или сеть? Какой язык/рамки? Ответ в значительной степени зависит от этих деталей. – Soonts

+1

Короткий ответ - это зависит от того, как асинхронный ввод-вывод реализуется на языке программирования, его времени исполнения, операционной системы и драйверов. – Soonts

ответ

1

ЦП выпускается в любом случае. Не имеет смысла держать процессорное ядро ​​бездействующим, пока выполняется IO. Другой поток может быть запланирован.

Async IO действительно имеет меньше потоков. IO - это просто структура данных ядра. IO не обязательно должен быть «в потоке». Async IO отделяет потоки и IO.

Если у вас есть 1M подключенные сокеты и читаете на всех них, вы действительно не хотите потоков 1M.

0

Корень путаницы в том, что вы на самом деле есть три варианта:

  • В одном потоке, начните ввод/вывод и ждать его до конца («блокирование» или «синхронный» I/O)
  • В одном потоке запускать ввод-вывод и выполнять что-то еще во время его работы («асинхронный» ввод-вывод)
  • В нескольких потоках запускать ввод-вывод и «ждать» для его завершения («блокировка» "или" синхронный "ввод-вывод, но с несколькими потоками). В этом случае только один поток ждет, пока другие продолжают делать полезную работу.

Так что, если вы используете асинхронной I/O, вы избегаете как альтернативы - блокирование процессора или с использованием нескольких потоков.

Смежные вопросы