Re: Послать UDP сообщение по быстрому
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.10.05 00:58
Оценка: 1 (1) +1
У тебя возникнут следующие трудности:
1. Если выдерживать времянку не поллингом, а все-таки с помощью
какого-нибудь таймера, то ты привязан к тикам системного таймера. Они,
если я не ошибаюсь, имеют в NT/XP частоту 100 Hz. Если же использовать
поллинг, то CPU time будет расходоваться впустую
2. Тебя может прерывать всякая разная системная активность. Совершенно
не обязятельно, что сетевая. Это может быть, например, подкачка с диска.
Это может добавлять задержки вплоть до единиц миллисекунд (редко — до
десятков) в совершенно неожиданные моменты времени. Для user space
процессов ситуация хуже, т.к. они конкурируют с другими процессами. Но
даже перетаскивание твоего кода в ядро (например, в NDIS'овский
протокольный драйвер) не очень поможет.
3. У сетевого драйвера есть своя очередь, и ты не можешь управлять ей.
Если там уже лежит 100 пакетов, твой будет 101-м. Приоритеты пакетов
поддерживаются далеко не всеми драйверами.
4. На принимающей стороне могут быть свои задержки.
5. Коллизии в сети тоже вносят свой вклад. Пакет размером 1500 байт
передается на скорости 10 mbps в течении 1.2 мс. В тот момент, когда
пришла пора передавать твой пакет, сеть может быть занята чужим пакетом.
Даже в 100 mbps сети встречаются 10-мегабитные пакеты, если там есть
хоть одно 10-мегабитное устройство.

В общем, лучше не рассчитывать на возможность посылать пакеты с точной
времянкой.

qqqqq wrote:
>
> From: *qqqqq* </Users/Profile.aspx?uid=14500> </search/?group=11>
> </Users/Private/AddFav.aspx?mid=1420793> <NewMsg.aspx?gid=11>
> <NewMsg.aspx?mid=1420793> <?mid=1420793>
> <Message.aspx?mid=1420793#1420793> <NewMsg.aspx?mid=1420793&edit=1>
> <Private/Self.aspx?mid=1420793>
>
> Мне надо из моей программы перидодически посылать UDP пакеты с
> достаточно точным периодом от 19 до 21 ms. Предположим я сделаю
> планировщик в проге более-менее стабильный. Но даже если я буду посылать
> UDP сообщения в winsock с идеально точной частотой, то кто же его знает
> какую задержку этот winsock внесет и главное насколько сильно эта
> задержка будет меняться от случая к случаю. Я так понимаю в Windows
> должны быть какие нибудь потоки/процессы/драйверы/и т.д. и т.п. которые
> передают сообщения от уровня к уровню, и когда оно до сетевой карты
> дойдет и та его наконец пошлет наружу в провод никому не известно.
> Я думаю, а может ну этот winsock нафик и просто самому UDP пакет собрать
> во всеми UDP/IP/и т.д. полями и послатъ его через WinPcap или raw
> socket? WinPcap должен быть побыстрее winsock'а потому что он вроде
> напрямую с драйвером общается. Правда с фрагментации UDP пакетов в
> WinPcap'е нет . А есть ли какая нибудь платная сетевая библиотека (или
> драйвер) которая бы была а-ля реал тайм и еще с UDP
> фрагментацией/дефрагментацией? Нашел вот Packet Sniffer SDK
> www.microolap.com <http://www.microolap.com> он хоть и сниффер но
> посылать тоже умеет. Кто нибудь ей пользовался? Как она в смысле
> быстродействия? Или еще что нибудь кто нибудь посоветует?
> Послать UDP сообщение по быстрому <?mid=1420793> Оценить
> <RateList.aspx?mid=1420793> <Private/Rate.aspx?mid=1420793&rate=-3>
> <Private/Rate.aspx?mid=1420793&rate=1>
> <Private/Rate.aspx?mid=1420793&rate=2>
> <Private/Rate.aspx?mid=1420793&rate=3>
> <Private/Rate.aspx?mid=1420793&rate=-1>
> <Private/Rate.aspx?mid=1420793&rate=-2>
> <Private/Rate.aspx?mid=1420793&rate=-4>
> <Private/Rate.aspx?mid=1420793&rate=0>
>
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.