![]() |
Получение больших сообщений по Tcp/Ip
Привет кто знает как помочь..
Проблемка: надо получить большие сообщения с очень большой частотой. Попытка работать с event не учачно, я не успеваю считать сообщение приходить новое.. Читать в цикле тоже самое. Использование бафера тоже не помогает, он переполняется... Пытался увеличить бафер сокета не помогает... Кто знает как помочь.. Зарание благодарю. |
Исходники в студию! И спецификацию больших сообщений то же.
|
Создать менеджер на 20(скажем) тредов, по получению event, сообщение уходит на свободный тред, там обрабатывается, тред его кладет в буфер, и сообщает менеджеру что он свободен. Таким макаром ты будеш точно знать нагрузку, время обработки одного сообщения и т.п.
Хотя звучит странновато, что обработка сообщения берет больше времени чем получение нового. 1 пакет в 100 байт на 100Мбит приходит за 8микросекунд - для гигагерцного проца это до фига времени. |
сообщения размером 32-64К
приходять каждые 1.5 мили есть отдельный thread который читает и ложит в бафер. вот тут и загвоздка как сделать этот thread. |
Цитата:
|
есть 2 таких объекта
у них высокий приоритет. вот только что там про: Цитата:
|
Я использую для таких целеи класс RingBuffer. У класса есть внутреннии Array, куда записываются данные. По приходу дат они записываются в этот Array, в отдельном Thread эти даты потом обрабатываются.
|
Цитата:
Программа под intel платформу? |
Цитата:
Но иногда не успеваю все прочитывать с сокета... добавлено через 1 минуту Цитата:
|
Если прога пишется на C/C++, то читайте описание на:
1. __declspec( align( # ) ) 2. На SSE2 инструкции от intel: http://www.intel.com/products/proces...uals/index.htm |
Цитата:
Если пишеш на Си то стоит исспользовать интеловский компилер. + у интела есть профилеровщик VTune. А еще есть проект FastCode в котором пишутся быстрые эквиваленты библиотечным функциям. Проект ориентирован на Дельфи, но там в основном все на асме, можно безболезненоо скопировать. |
Цитата:
начальство жадное... добавлено через 2 минуты Цитата:
можешь рассказать, на сайте не смог найти по этому поводу ничего |
__declspec( align( выравнивание ) ) тип имя_массива[размер];
Так можно задать выравненный массив. Т.е. адрес массива (адрес нулевого элемента) будет кратен значению выравнивание. Это позволяет использовать команды с выравненными данными, а они часто являются более быстрыми командами процессора. Например __declspec( align( 32 ) ) unsigned __int32 g_aFrameBuffer[1024 * 1024]; PS. выравнивание -- целое число, степень 2. |
т.е если я правильно понял, мне нужно опредилить мой баффер таким образом, и затем я могу с ним работать так же как я бы опредилил его
BYTE buff[1024] |
Абсолютно верно, только советую учитывать особенность многих компиляторов -- они мало что знают про SSE/SSE2.
|
ok
|
| Часовой пояс GMT +4, время: 17:23. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.