|
|
|
Что такое Non-blocking I/O?
|
|||
|---|---|---|---|
|
#18+
Что такое Non-blocking I/O и где об этом почитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 19:39 |
|
||
|
Что такое Non-blocking I/O?
|
|||
|---|---|---|---|
|
#18+
это когда программа (поток выполнения) дает задачу устройству (диску, сетевой карте и т.д.) прочитать/записать данные, и не ждет окончания операции. Когда устройство заканчивает действия, оно присылает сигнал, а программа его подхватывает, например, с помощью callback-функции. В отличии от этого, при blocking I/O поток замораживается и ждет, когда устройство закончит действия. Очевидно, Non-blocking I/O несколько усложняет логику, зато в некоторых случаях приводит к более эффективной реализации (классический пример - COMET-сервер, где подход в стиле node.js намного экономичнее обыкновенного подхода с синхронными операциями и тысячами ждущих потоков, которые только занимают место). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 19:57 |
|
||
|
Что такое Non-blocking I/O?
|
|||
|---|---|---|---|
|
#18+
да-яЧто такое 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 коннектов и пытаясь сделать ввод-вывод в них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2012, 23:11 |
|
||
|
Что такое Non-blocking I/O?
|
|||
|---|---|---|---|
|
#18+
Проясним ситуацИ callbackи тут не обязательны, это просто один из подходов. Можно и без них - просто обходя все эти 10000 коннектов и пытаясь сделать ввод-вывод в них. Имеется ввиду под 10000 коннектов в одном потоке открыть 10000 сокетов? А callback первично обрабатывает полученные данные и затем устанавливает флаг готовности данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2012, 03:42 |
|
||
|
Что такое Non-blocking I/O?
|
|||
|---|---|---|---|
|
#18+
да-яПроясним ситуацИ callbackи тут не обязательны, это просто один из подходов. Можно и без них - просто обходя все эти 10000 коннектов и пытаясь сделать ввод-вывод в них. Имеется ввиду под 10000 коннектов в одном потоке открыть 10000 сокетов? Да, примерно так. При read/write в эти сокеты при невозможности чтения/записи будет возвращен EWOULDBLOCK, вместо ухода в неопределенно долгое ожидание. Т.е. можно перейти к другому сокету и т.д. да-яА callback первично обрабатывает полученные данные и затем устанавливает флаг готовности данных? Еще раз - callback - это просто техника. Система при, к примеру, вызове epool - просто вернет список сокетов, которые готовы читаться-писаться. Без всяких callback. callback - это просто способ реализации, популярный в libevent и ему подражателях. Как видно из примера ниже - можно и без callback http://kovyrin.net/2006/04/13/epoll-asynchronous-network-programming/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2012, 15:29 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=64&tid=1342116]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 380ms |

| 0 / 0 |
