Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.01;
Скачать: CL | DM;

Вниз

Магические числа при асинхронном чтении из канала.   Найти похожие ветки 

 
тимохов   (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 вся ветка

Текущий архив: 2009.11.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1252429844
wah
2009-09-08 21:10
2009.11.01
Oптимизировать загр. txt-файла в StringList и дальше в RichEdit


15-1251957649
Игорь
2009-09-03 10:00
2009.11.01
Привилегии системного процесса


2-1253078993
Knight
2009-09-16 09:29
2009.11.01
Несколько глупых вопросов по потокам...


1-1222168796
Игорь
2008-09-23 15:19
2009.11.01
Как сменить пользователя программно?


15-1251775427
Jeyson
2009-09-01 07:23
2009.11.01
Консоль