2016-01-31 4 views
1

в зависимости от того, что я думаю об асинхронности, я все же придумываю какой-то параллелизм.более подробную информацию об асинхронном вызове IO

This guy here говорит, что асинхронность может иметь две разновидности:

  • моделируемой асинхронность (позвольте мне назвать это тот путь) - где нить икру для выполнения асинхронной некоторых операций. Для меня это поддельная асинхронность, и она похожа на параллелизм. Я не вижу здесь никаких реальных преимуществ.

  • аппаратное обеспечение, поддерживающее asynch, - где запрос только что пересылается на аппаратное обеспечение (например, жесткий диск или сетевая карта), а управление выполняется немедленно. Когда операция ввода-вывода будет готова, ЦП будет уведомлен и будет выполнен обратный вызов. Кажется, это нормально, если вы думаете об одном одиночном запросе ввода-вывода, но если я попытаюсь расширить пример для нескольких запросов ввода-вывода, я все равно прихожу к параллелизму только в том, что согласованность была отправлена ​​на аппаратное обеспечение. не Вот схема для двух асинхронных IO называет:

    1. процессора ----- Ио асинхронной REQ 1 -----> Оборудование
    2. процессором < ------ возвращает управление (нет данных) ------- Аппаратное обеспечение
    3. CPU ----- io async req 2 ------> Оборудование
    4. CPU < ------ вернуть управление (нет данных) - ----- Аппаратное обеспечение
    5. CPU выполняет другие операции, в то время как аппаратное обеспечение выполняет две задачи ввода-вывода
    6. C PU < ------- данные для REQ 1 ------- Hardware
    7. ЦПУ выполняет обратный вызов
    8. ЦПУ выполняет другие операции
    9. CPU < -------- данные для REQ 2 ------- Оборудование
    10. CPU выполняет функцию обратного вызова

Как вы можете видеть, в строке 5, аппаратное обеспечение обрабатывает две задачи одновременно, параллелизм был передан в аппаратные средств , Итак, как я уже сказал, какой бы я ни думал об асинхронности, я все же придумываю какой-то параллелизм, конечно, на этот раз не процессор, который его обрабатывает, а IO-Hardware.

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

Заранее за вашу помощь.

+1

Возможно, вы сбиваете с толку многопоточность с параллелизмом? Параллелизм более общий и охватывает любые процессы, делающие вещи бок о бок. – usr

+0

@usr, вы правы, я имел в виду, что я действительно соглашался – humbletrader

+0

Я заменил все вхождения многопоточности на параллелизм – humbletrader

ответ

2

Async IO в основном не нуждается в существовании нити на протяжении IO. Представьте, что сервер ожидает 1000000 TCP-соединений для получения данных. С одним потоком на одно соединение, которое сильно сгорело в памяти.

Вместо этого выдается безреверсивный асинхронный IO, и это всего лишь небольшая структура данных. Это регистрация в ОС, в которой говорится: «Если данные вернутся, перезвоните мне».

Как меняется карта IO на аппаратные операции. Некоторые аппаратные средства могут иметь встроенный параллелизм. Мой SSD, безусловно, потому, что на нем есть несколько независимых флеш-чипов. Другие аппаратные средства не смогут обрабатывать несколько IO одновременно. Старые магнитные диски этого не делали. Простые сетевые адаптеры не имеют параллелизма. Здесь драйвер или ОС будут сериализовать запросы.

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

Async IO имеет меньше резьбы. Речь идет не о том, чтобы управлять оборудованием по-другому.

+1

Я думаю, вы пропустили ключевой момент: Async IO полностью не связан с аппаратным параллелизмом. Async IO используется для сохранения потоков и памяти, ничего другого. Аппаратный параллелизм предназначен для повышения производительности, если он доступен. Вы не можете имитировать аппаратный параллелизм в CPU. Здесь нет компромисса или выбора. – usr

+1

Node.js не пользуется популярностью из-за асинхронного ввода-вывода. Другие платформы также имеют асинхронный ввод-вывод. Node.js является популярным * несмотря на это, потому что несколько лет назад async IO заставил код превратиться в беспорядок обратного вызова. Это ужасно для качества кода. Честно говоря, большинство людей не понимают масштабируемость и не понимают преимуществ и недостатков Node.js. – usr

+1

'Если оборудование обрабатывает операции ввода-вывода последовательно, то доказательство не так очевидно. Что не очевидно в примере 1М TCP-соединений, который у меня есть? Вы не можете создавать потоки 1M. – usr

1

Не похоже, что вы вообще понимаете асинхронный ввод-вывод. Вот типичный пример работы асинхронного ввода-вывода:

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

В потоке могут быть десятки асинхронных операций ввода-вывода, ожидающих выполнения в любое конкретное время.

+0

Спасибо за ваш ответ, я думаю, что у меня есть хорошее понимание асинхронности, но я мог бы смутить вас текстовая диаграмма. Обратите внимание, что в строках 2 и 4. Я не имел в виду, что оборудование отправляет данные обратно в CPU. Я имел в виду: аппаратное обеспечение возвращает процессорный процессор. Данные для запроса 1 отправляются в ЦП только по строке 6. – humbletrader

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