English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Базовые технологии для поддержки Java NIO и NodeJS

Поддерживающая технологии Java NIO и NodeJS

Как известно, в последних версиях Java добавлена поддержка Java NIO, NIO2, в то же время одним из наиболее известных преимуществ технологии NodeJS является ее высокая производительность ввода-вывода. Сегодня мы будем обсуждать тему, поддерживающую эти технологии.

Прежде чем начать, нужно明确提出一个问题:

Почему NodeJS и Java NIO2 не появились раньше?

Ответ:Лично я считаю, что поддержка底层 технологий еще не готова.

Тогда, что такое底层 технология? Правильно, многие уже догадались, это технология операционной системы. Два концепта, предложенные в этой статье, Java NIO2 и NodeJS,无一例外都是用户ские технологии или, можно сказать, технологии уровня приложения, которые работают на ОС. В то же время с прогрессом операционной системы, поддерживаемые модели программирования становятся более разнообразными. Можно сказать, что эти две технологии полностью эволюционировали для получения红利 от прогресса операционной системы. Как правило,最先享受这种红利的技术一定是 C\C++, так как прогресс ОС предоставляет的大部分 новых системных вызовов, и C\C++ наиболее удобен для использования этих системных вызовов, но в то же время он является наиболее сложным. Другие платформы, чтобы также получить такие же характеристики, должны постоянно эволюционировать, обобщать, чтобы пользователи могли использовать эти红利. Если платформа останавливается в обновлении, это означает, что платформа приходит в упадок. Для пользователей, чем удобнее обобщение, тем более дружелюбной она является, и чем больше людей будут использовать ее. Хотя многие могут быстро написать код на основе этих платформ, но часто не понимают их сути, потому что по сути не понимают мотивацию и принципы этих технологий. Ниже мы будем обсуждать эти технологии, связанные с этими двумя технологиями.

В любом случае, в设计中 ОС, следующие пять моделей ввода-вывода являются необходимыми.

1. Блокирующий ввод-вывод
2. Неблокирующий ввод-вывод
3. Многоплексирование ввода-вывода (select, poll и epoll)
4. Ввод-вывод, управляемый сигналами (SIGIO)
5. Асинхронное ввод-вывод (функции POSIX aio_)

1. Блокирующий ввод-вывод

如图所示, преимуществом этой модели ввода-вывода является простота программирования, она также является одной из первых моделей ввода-вывода, поддерживаемых ОС, но недостатком является то, что системные вызовы блокируют выполнение динамического потока пользователя, что приводит к浪费у CPU-времени и низкой эффективности ввода-вывода.

2. Неблокирующий ввод-вывод

如图所示, улучшение этой модели ввода-вывода заключается в том, что ввод-вывод не блокирует, но требует долгого ожидания, что также浪费 CPU-циклы.

3. Многоплексирование ввода-вывода (select, poll и epoll)

如图所示, данная модель IO является наиболее стабильной моделью IO, предоставляемой современными операционными системами, и большинство主流 приложений построены на этой модели, например, NodeJS, но эти платформы часто добавляют слой обертки на эту модель, чтобы напрямую поддерживать AIO.

4. Ввод-вывод, управляемый сигналами (SIGIO)

如图所示, данная модель IO не имеет преимуществ перед моделью 3 по производительности, и из-за нестабильной поддержки системы, она редко используется разработчиками.

5. Асинхронное ввод-вывод (функции POSIX aio_)

如图所示,此种IO модель является наиболее完美的AIO, а программная модель также самая простая, но операционные системы, которые могут идеально поддерживать эту модель, очень редки. В Интернете указывается, что Linux работает над этим, и как только операционная система достигнет прогресса в этой области, фреймворки, платформы и программные модели могут потребовать значительного упрощения.

Хотя很少操作系统支持这种模型, но это не означает, что сейчас нет такой модели AIO. Многие фреймворки сделали相关工作 в этой области, имитируя AIO в пользовательском режиме, чтобы пользователи могли больше сосредоточиться на коде бизнес-логики.

6. Синхронизация и асинхронизация, блокировка и неблокировка

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

Вот и все, что есть в этой статье, надеюсь, это поможет вам в изучении.我们也希望大家多多支持呐喊教程。

Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору. Контент был предоставлен пользователями Интернета, веб-сайт не имеет права собственности на него, не был отредактирован вручную и не несет ответственности за него. Если вы обнаружите контент,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @), и предоставьте соответствующие доказательства. При обнаружении фактов нарушения авторских прав сайт немедленно удалят涉嫌侵权的内容。

Вам может понравиться