Re: WSAxxx vs. unix-live IO (Re: fprintf && write)

From
Valentin Nechayev ()
To
Boris Rudakov ()
Date
2003-06-11T09:52:06Z
Area
CARBON.COPY
 * Forwarded from area 'RU.UNIX.PROG'
From: Valentin Nechayev <netch@segfault.kiev.ua>


>>> Boris Rudakov wrote:

 >>> 5. *Есть такая штука - юниксы* :):):):) куда код, основанный на
 >>> "фундаментальных" средствах API, портируется относительно просто, а
 >>> вот "оригинальное API", в данном случае WSAxxx - прибавляет лишнего
 >>> головняка.
 IS>> Для портирования в юникс единственный удобный интерфейс - это
 IS>> select/send/recv. Overlapped ReadFile/WriteFile и WSARecv/WSASend в
 IS>> плане портируемости ничем не отличаются.
BR> Немножко отличаются.
BR> В юниксах read умеет сокеты читать ? Я не пробовал пока, но удивлюсь если не
BR> умеет...

Умеет. С поправкой на то, что некоторые вещи через read() читать нельзя.
Например, если к датаграмме приложен control. Да, read() такое даже возьмёт,
кажется, но толку будет мало.

BR> Но если умеет, то еще раз повторюсь: проще всего повторить функцию на базе
BR> цикла ReadFile...GetOverlappedResult на идентичную по смыслу с циклом на
BR> read...select.

Опять ты пытаешься сравнивать асинхронное чтение с read...select.
Это разные случаи. read+select может быть эквивалентом или в пределах цикла
с множеством сокетов, или с учётом таймаута. При необходимости получить
в ветке пришедший поток, select() просто лишний. При объектах прямого доступа,
нужен aio_read().

 >>> НО: портировать в юникс функцию на цикле
 >>> ReadFile...GetOverlappedResult куда как проще, переделав ее в функцию
 >>> на цикле read...select, чем мудохаться с ни на что не похожими WSA.
 IS>> Как я уже сказал, WSARecv..GetOverlappedResult ничем не отличается
 IS>> от ReadFile...GetOverlappedResult.
BR> Я обдумаю эту идею...
BR> Все-равно мне в скорости предстоит портировать в юниксы здоровенный и очень
BR> сложный IO конвейер, все-равно его придется перекраивать чтобы учесть
BR> юниксоидные аспекты, так что можно будет еще и эту тонкость поизучать...

Этот конвейер работает с какими типами объектов? Есть ли файлы или плоские
диски? Сколько остального - сокетов, пайпов?

BR> ЗЫ: А за книгу я был бы в высшей степени признателен. Мой код сейчас делает
BR> Апач на ~20-30% (это очень мало), а IIS - на 200-250%. Этого мне мало. Хочу
BR> приблизиться к суперсерверам, типа того же Zeus (он Апача в ~5 раз делает на
BR> большой загрузке). Для достижения таких результатов мне знания тонкостей пока
BR> явно не хватает...

Я думаю, что книга сама по себе для такой оптимизации не годится.
А специфика какова? Апач потому медленный, что у него совершенно разные
типы отдачи и обработки слиты в одном флаконе и всё это ещё проходит через
конвейер обработки разными модулями. Упростив структуру, можно получить
ускорение на отсутствии сложной обработки.


-netch-
--- ifmail v.2.15dev5
 * Origin: Dark side of coredump (2:5020/400)