Друкарня від WE.UA

Java. Основи неблокуючого I/O

Блокуюче I/O

Що таке блокуючі виклики?

Блокуючі виклики в Java - це операції вводу/виводу (I/O), які зупиняють виконання поточного потоку, доки дані не будуть повністю прочитані або записані. Наприклад, при читанні даних з файлу або при виконанні мережевого запиту.

Що відбувається з потоком під час блокуючого виклику?

Під час мережевого запиту, якщо дані ще не готові, потік, який виконує блокуючий виклик, заморожується. Це означає, що він не може виконувати інші завдання або обробляти інші запити, поки не отримає відповідь.

Який системний виклик використовується?

Під капотом, для мережевих операцій, використовуються системні виклики, такі як `read()` та `write()` в Unix-подібних системах. Ці виклики звертаються до операційної системи для виконання I/O операцій.

Чому ми чекаємо?

Потік чекає, бо ОС повинна виконати операцію I/O, яка може вимагати часу - наприклад, чекати на отримання даних з мережі або завершення читання диска.

Неблокуюче I/O

Що таке неблокуючий виклик?

Неблокуюче I/O дозволяє потоку продовжувати виконання, навіть коли дані ще не готові. Замість того, щоб зупинятися і чекати, потік може перевірити статус операції і, якщо дані недоступні, зайнятися іншими завданнями.

Неблокуючі мережеві системні виклики ядра

Системи, які підтримують неблокуюче I/O, використовують механізми, такі як `epoll` в Linux, `kqueue` в BSD, які дозволяють потокам ефективно моніторити кілька I/O потоків без блокування.

1. epoll у Linux:

  • epoll - це механізм введення-виведення, який дозволяє ефективно моніторити кілька файлових дескрипторів.

  • Він використовується для реалізації неблокуючих і асинхронних I/O операцій.

  • epoll працює з подією, підписуючись на різні типи подій для кожного дескриптора, і повідомляє програму, коли ці події настають, замість того, щоб чекати на завершення I/O.

2. kqueue у BSD:

  • kqueue - аналогічний механізм, який використовується в BSD-подібних системах.

  • Він також дозволяє моніторити різноманітні події, включаючи файли, сокети та таймери.

  • kqueue ефективно обробляє велику кількість подій, зменшуючи навантаження на систему.

В Java NIO з’явилася можливість створити потік, який знатиме, який канал готовий для запису та читання даних і може обробляти цей конкретний канал. Це реалізується за допомогою класу Selector.

Уявімо, що у вас є сервер, який одночасно обслуговує багато клієнтів через мережу. Замість того, щоб створювати новий потік для кожного клієнта (що може бути неефективним та витратним з точки зору ресурсів), ви використовуєте один потік і Selector.

Selector працює як централізований менеджер, який стежить за всіма з'єднаннями. Коли клієнт надсилає запит до сервера, Selector визначає, яке з'єднання готове до обробки (наприклад, прийому або відправки даних). Це дозволяє серверу ефективно переключатися між багатьма з'єднаннями, використовуючи невелику кількість потоків.

Цей підхід особливо корисний у ситуаціях, де сервер повинен одночасно обробляти значну к-ть з'єднань, але кожне з'єднання активно лише частину часу — веб-сервери, чат-сервера, ігри, etc.

15

Неблокуюче I/O дозволяє потоку продовжувати виконання інших завдань, поки очікується на введення-виведення. Це підвищує загальну ефективність, дозволяючи одному потоку обробляти декілька I/O операцій одночасно, не даючи потоку “простоювати“.

Статті про вітчизняний бізнес та цікавих людей:

  • Як побудована програма Meest China Academy

    Курс про товарний бізнес охоплює різні етапи роботи: від пошуку ідеї до перевірки товару, логістики та масштабування. Програма Meest China Academy містить 17 модулів, які послідовно розкривають ці теми без зведення всього навчання до однієї універсальної поради.

    Теми цього довгочиту:

    Meest
  • Які технології використані в Айфон 17

    Айфон 17 поєднує OLED-дисплей із частотою до 120 Гц, чип A19, дві камери Fusion 48 Мп і швидке заряджання через USB-C. У COMFY можна купити Айфон 17 з накопичувачем на 256 або 512 ГБ, вибравши конфігурацію відповідно до обсягу фото, відео та застосунків

    Теми цього довгочиту:

    Iphone 17
  • Як вибрати вживаний iPhone: коротке керівництво для розумної покупки

    Вторинний ринок смартфонів Apple активно зростає, і питання, як вибрати вживаний iPhone, стає актуальним для дедалі більшої кількості користувачів. Правильний підхід дозволяє отримати бу iPhone з актуальною iOS і доброю камерою за помітно нижчу ціну, ніж у нових пристроїв.

    Теми цього довгочиту:

    Iphone
  • Як подолати жіночу безплідність за допомогою донорських яйцеклітин

    Діагноз "безпліддя" рідко звучить як вирок одразу. Для багатьох жінок саме в цей момент вперше звучить словосполучення "донорські яйцеклітини" — і це часто не кінець шляху до материнства, а якраз новий, реальний шанс.

    Теми цього довгочиту:

    Донорство
  • Як заспокоїти зубний біль і чому самолікування може призвести до операції?

    Раптовий біль у зубі може призвести до порушення сну та ускладненого вживання їжі. Люди часто приймають таблетки, роблять полоскання або лікуються народними засобами. В таких випадках не варто відкладати візит до стоматолога, адже можуть з’явитись ускладнення.

    Теми цього довгочиту:

    Стоматологія
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Oleksandr Klymenko
Oleksandr Klymenko@overpathz

Java Software Engineer

40Довгочити
9.4KПерегляди
104Підписники
На Друкарні з 19 квітня 2023

Більше від автора

  • Java Memory Model ↔ PostgreSQL MVCC: один і той самий фундамент конкурентності

    Java Memory Model та PostgreSQL MVCC/Isolation Levels — це дві відповіді на одне й те саме фундаментальне питання: за яких умов зміна, зроблена одним учасником (потоком / транзакцією), стає видимою для іншого?

    Теми цього довгочиту:

    Java
  • Як виконується SQL-запит

    Сьогодні розберемо, що відбувається з вашим SELECT * FROM users WHERE age > 21 перед тим, як БД поверне вам дані

    Теми цього довгочиту:

    Computer Science

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: