Форум: "WinAPI";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
ВнизМагические числа при асинхронном чтении из канала. Найти похожие ветки
← →
тимохов (2008-09-11 18:49) [0]Здравствуйте.
У меня есть вопрос познавательного характера о именованных каналах.
У меня есть сервер, где транспорт реализован посредством именованных каналов.
Клиент к серверу подключается по сети, а не локально.
На стороне сервера с помощью функции ReadFile я асинхронно читаю из именованного канала.
В моем случае функция ReadFile сразу "сваливается" в фоновую работу, т.е. сразу происходит из нее выход и GetLastError возвращает ERROR_IO_PENDING. После этого я жду с помощью функции WaitForMultipleObjects завершения операции. После чего с помощью функции GetOverlappedResult узнаю сколько реально было прочитано.
Размер буферов именованного канала в моем случае 32кб. Также я провожу чтение блоками по 32 кб.
При анализе логов я заметил, что значение BytesTransfered, возвращаемое функцией GetOverlappedResult, имеет всего 2 значения: 4292 или 1155, причем первое число встречается значительно чаще.
ВОПРОС.
Есть ли какие-то "магические" числа, сходные с указанными выше? Ну там, размеры пакетов IP или еще что?
Просто интересно.
Спасибо :)
← →
тимохов (2008-09-11 19:13) [1]А, еще забыл сказать, что каналы имеют тип PIPE_TYPE_BYTE. Т.е. это потоки байтов, а не сообщения. Протокол я определяю сам - вначала 4 байта длины, потом сами данные.
← →
Сергей М. © (2008-09-11 21:33) [2]
> ВОПРОС.
> Есть ли
ОТВЕТ:
Нет.
И быть не может.
← →
тимохов (2008-09-11 22:20) [3]Не, ну должно быть что-то закономерное в этом. У меня нагрузочное тестирование было в течении нескольких часов - результат именно такой-же.
Видимо как-то с размером пакета IP связано. Или вообще что-то с канального уровня поднимается такое. Ибо локально такой закономерности нет.
Ладно, спасибо и на этом. Видимо, если и есть здесь закономерность, то ее знают только производители оборудования.
← →
Сергей М. © (2008-09-11 22:26) [4]
> Видимо как-то с размером пакета IP связано
Какой нафих IP ?
Стек протоколов, базирующихся на IP, может быть вообще не инсталлирован в твоей системе, однако именованые пайпы обязаны работать ..
← →
тимохов (2008-09-11 22:40) [5]
> Какой нафих IP ?
>
> Стек протоколов, базирующихся на IP, может быть вообще не
> инсталлирован в твоей системе, однако именованые пайпы обязаны
> работать ..
Сергей, но я же и говорю явно про мой конкретный случай. Ну интересно же из частного вопроса сделать общий вывод с помощью авторитетного мнения специалистов.
Собственно вопрос имеет и практический смысл. Может я что-то неверно написал в своем сервере, что идет чтение такими, в общем-то, небольшими кусками по 4кб. Я обнаружил по логу, что почти 100% операций ReadFile никогда не выполняются синхронно, а сразу сваливаются в оверлаппед режим, хотя, судя по MSDN, синхронное выполнение чтения даже при задании последним параметром структуры OVERLAPPED все равно возможно (как минимум при запуске сервера и клиента на одной машине *большинство* операций чтения заканчиваются синхронно).
У меня сложилось такое ощущение, что постоянно сваливание ReadFile в асинхронный режим и последующий вызов WaitForMultipleObjects не очень производительно. Я всегда думал, что оверлаппед чтение призвано повышать производительность - можно обойтись одним потоком для чтения запросов от множества клиентов, что приведет к тому, что не будет переключения между множество потоков.
В общем, я в некотором замешательстве относительно производительности моего сервера. Может именованный каналы вообще штука не очень быстрая?
Если есть у кого опыт написание серверов на именованных каналах, поделитесь, пожалуйста, опытом.
Спасибо.
← →
Германн © (2008-09-12 02:50) [6]Оп-ля. А кто перекинул сей топик из WinAPI в "Прочее"?
И почему?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c