powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Что такое Non-blocking I/O?
5 сообщений из 5, страница 1 из 1
Что такое Non-blocking I/O?
    #37975034
да-я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что такое Non-blocking I/O и где об этом почитать?
...
Рейтинг: 0 / 0
Что такое Non-blocking I/O?
    #37975051
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это когда программа (поток выполнения) дает задачу устройству (диску, сетевой карте и т.д.) прочитать/записать данные, и не ждет окончания операции. Когда устройство заканчивает действия, оно присылает сигнал, а программа его подхватывает, например, с помощью callback-функции.

В отличии от этого, при blocking I/O поток замораживается и ждет, когда устройство закончит действия.

Очевидно, Non-blocking I/O несколько усложняет логику, зато в некоторых случаях приводит к более эффективной реализации (классический пример - COMET-сервер, где подход в стиле node.js намного экономичнее обыкновенного подхода с синхронными операциями и тысячами ждущих потоков, которые только занимают место).
...
Рейтинг: 0 / 0
Что такое Non-blocking I/O?
    #37975225
да-яЧто такое Non-blocking I/O и где об этом почитать?

Читать отсель

http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5


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

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

Тем самым можно поиметь некислый профит - чем делать 10000 потоков (каждый со своим стеком и прочими причиндалами) можно обойтись всего одним потоком, который будет обслуживать все 10000 соединений (ибо 99.99% времени среднестатический поток в apache, к примеру, просто находится в состоянии idle, вернее i/o wait, при этом оперативная память его, процесса, никак не используется).

И callbackи тут не обязательны, это просто один из подходов. Можно и без них - просто обходя все эти 10000 коннектов и пытаясь сделать ввод-вывод в них.
...
Рейтинг: 0 / 0
Что такое Non-blocking I/O?
    #37975362
да-я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проясним ситуацИ callbackи тут не обязательны, это просто один из подходов. Можно и без них - просто обходя все эти 10000 коннектов и пытаясь сделать ввод-вывод в них.
Имеется ввиду под 10000 коннектов в одном потоке открыть 10000 сокетов?

А callback первично обрабатывает полученные данные и затем устанавливает флаг готовности данных?
...
Рейтинг: 0 / 0
Что такое Non-blocking I/O?
    #37976133
да-яПроясним ситуацИ callbackи тут не обязательны, это просто один из подходов. Можно и без них - просто обходя все эти 10000 коннектов и пытаясь сделать ввод-вывод в них.
Имеется ввиду под 10000 коннектов в одном потоке открыть 10000 сокетов?
Да, примерно так. При read/write в эти сокеты при невозможности чтения/записи будет возвращен EWOULDBLOCK, вместо ухода в неопределенно долгое ожидание. Т.е. можно перейти к другому сокету и т.д.

да-яА callback первично обрабатывает полученные данные и затем устанавливает флаг готовности данных?

Еще раз - callback - это просто техника. Система при, к примеру, вызове epool - просто вернет список сокетов, которые готовы читаться-писаться. Без всяких callback.

callback - это просто способ реализации, популярный в libevent и ему подражателях.

Как видно из примера ниже - можно и без callback

http://kovyrin.net/2006/04/13/epoll-asynchronous-network-programming/
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Что такое Non-blocking I/O?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]