Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252

Обработка поступающих данных без задержки основного цикла

17.06.2011, 00:51. Показов 4547. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Получаю из какого-то соединения днс адреса сайтов. Считываю их из буфера в цикле. Один цикл - один днс. Нужно чтобы каждый днс переводился в ip и этот ip заносился вконец вектора. Но при этом основной цикл не должен тормозиться ни на миллисекунду, а функция преобразования dns -> ip всилу наличия пинга между моим компом и днс сервером и всилу наличия задержки у самого сервера - очень сильно тормозит... иногда на время более одной секунды. Что посоветуете в данном случае?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2011, 00:51
Ответы с готовыми решениями:

Библиотека BASS (un4seen): возможна ли обработка звука в реальном времени без существенной задержки?
Здравствуйте. Если использовать приличный ноутбук с внешней (тоже приличной) звуковой картой, то можно ли обработать в реальном...

Обновление данных в базе без задержки
Поясните как обойти такой глюк: Я исользую два объекта работающие с одной и той же базой. adoMaterials - ADO Data Control ...

Обработка поступающих вложений doc
Уважаемый all! Я понимаю, что ворд на сервере это плохо, но пока увы. Проблема в том, что никак не удается наладить четкую обработку на...

42
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.06.2011, 22:15
Студворк — интернет-сервис помощи студентам
жесть...

вот, глянь. ведь все уже написано: async_resolve()
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
17.06.2011, 22:31  [ТС]
niXman, да нет, почему же жесть, async_resolve хорошее решение... но при многопоточности в отдельном потоке можно сразу попутно решать и другие задачи подобного рода, pthread является более универсальным решением...
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.06.2011, 22:55
Цитата Сообщение от Union Посмотреть сообщение
но при многопоточности в отдельном потоке можно сразу попутно решать и другие задачи
решай. на то у тебя есть completion_handler

Цитата Сообщение от Union Посмотреть сообщение
pthread является более универсальным решением


Добавлено через 6 минут
вах! так ты же еще и с сокетом работаешь!
самое время задуматься над использованием asio.
и тут: https://www.cyberforum.ru/faq/thread317829.html
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
17.06.2011, 23:17  [ТС]
У меня сейчас работает сервачек, написанный на селектах, держет не более 10 тыс соединений. Пол года назад здесь кто-то убеждали что лучшее решение epoll, а потом ещё один человек в аське рекомендовал использовать именно его, утверждая что приложение без всякой нагрузки потяент больше 50 тыс соединений ... на asio потянет еще больше?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.06.2011, 23:34
Цитата Сообщение от Union Посмотреть сообщение
на селектах, держет не более 10 тыс соединений
как Вам такое удалось? оО
100 потоков со стами селектами? оО
ибо на селект не рекомендуется и 1000 дескриптор вешать

Цитата Сообщение от Union Посмотреть сообщение
больше 50 тыс соединений
не нужно забывать о том, что на одном сетевом интерфейсе возможно создать максимум 65к коннектов.

Цитата Сообщение от Union Посмотреть сообщение
asio потянет еще больше?
в линуксе, asio использует epoll().
моя система говорит что может мониторить 324608. многовато как-то...
nixman@nixman ~ $ cat /proc/sys/fs/epoll/max_user_watches
324608
но производительность серверов не только кол-вом повисших коннектов меряется
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
17.06.2011, 23:34  [ТС]
Вообще я не очень представляю себе как это работает... мне говорили что основная нагрузка именно в моем приложениии создается переключением между дескрипторами - поэтому распараллеливание не ускоряет работу таких приложений.. и я в тупике. Единственное решение нашел в будущем сделать несколько серваков и перегонять трафик между ними, так чтобы количество соединений между ними распределилось поровну...
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.06.2011, 23:36
Цитата Сообщение от Union Посмотреть сообщение
мне говорили что основная нагрузка в сетевых приложениях создается переключением между дескрипторами
враки.
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
17.06.2011, 23:38  [ТС]
Ошибся, я имел ввиду именно своё приложение
От темы отошли, нехорошо...
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.06.2011, 23:39
Цитата Сообщение от niXman Посмотреть сообщение
враки.
хотя не совсем... это правда при использовании селекта
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
17.06.2011, 23:42  [ТС]
Ещё один вопросик, если основную нагрузку создает переключение между дескрипторами, дескрипторы у каждого потока свои, и получается я могу снизить нагрузку созданием нескольких потоков, равномерным распределением дескрипторов по ним и сделать чтобы каждый рассылал данные по своим дескрипторам?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.06.2011, 23:52
Цитата Сообщение от Union Посмотреть сообщение
я могу снизить нагрузку созданием нескольких потоков, равномерным распределением дескрипторов по ним и сделать чтобы каждый рассылал данные по своим дескрипторам?
да. но это уг. asio это делает искаропки
а именно нагрузку распределяет по рабочим потокам, коих пул.
1
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
18.06.2011, 12:18
Цитата Сообщение от niXman Посмотреть сообщение
не нужно забывать о том, что на одном сетевом интерфейсе возможно создать максимум 65к коннектов.
C какого это перепугу то??? Ну или уточняйте, что речь идет не о сетевом интерфейсе, а о конектах с одной локальной пары адрес:порт к какому-то одному хосту.

И 50к конектов (если они не просто висят, а есть какой-то трафик) тоже почти утопия. А так да, например Сысоев показывал 100k конектов, только вот nginx при этом еле ворочался. Да и во обще если говорить о высоко нагруженных сетевых приложениях, на мой взгляд лучше забыть про Си и смотреть на Erlang

Что, касается топика, к сожалению asio_resolver только ускорит процесс, но не снимет нагрузку, а наоборот создаст ее, т.к. использует системные getXXXbyYYY_r() Если же нужно и ускориться и не плодить оверхед на создание нитей, то лучше взять какую-нибудь библиотеку работающую с DNS самостоятельно, без системы, и (опционально) запускать ее в отдельном потоке. В качестве минуса это будет только DNS без всех возможностей NSS, а в качестве плюса если захочется что-то отличное от A/AAAA/PTR то ни вопрос.
1
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
18.06.2011, 13:49
под сетевым интерфейсом какраз и понимается пара ип:порт, это может быть как вай фай карта, так и впн соединение.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
18.06.2011, 14:37
А я всю жизнь считал, что это зовется transport-level endpoint... ну да ладно.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
18.06.2011, 15:47
Цитата Сообщение от nxnx Посмотреть сообщение
под сетевым интерфейсом какраз и понимается пара ип:порт, это может быть как вай фай карта, так и впн соединение.
я так же понимаю.

Добавлено через 1 минуту
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
к сожалению asio_resolver только ускорит процесс, но не снимет нагрузку, а наоборот создаст ее, т.к. использует системные getXXXbyYYY_r()
поясните. что-то не уловил мысли.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
18.06.2011, 17:25
Поясняю, boost _не_ умеет работать с DNS сам, он всего лишь содержит обертки к системному ресолверу. Ни в glibc, ни в libc нет и вряд ли когда либо появятся не блокируемые функции для разрешения имен. Пояснять, что обертка делающая из блокируемой функции не блокируемую стоит дорого в плане ресурсов надо?
Так же по моему очевидно, что если можно пожертвовать files/nis/etc которые умеет системный ресолвер и взять что-то маленькое и быстрое типа adns или asr, то будет и быстрее и легче чем обернутое семейство getXXXbyYYY(), за одного появиться возможность ресолвить MX/NS/etc и использовать DNS сервера не из resolv.conf
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
18.06.2011, 22:43
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
boost _не_ умеет работать с DNS сам, он всего лишь содержит обертки к системному ресолверу.
ну дык. разумеется.

Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
Пояснять, что обертка делающая из блокируемой функции не блокируемую стоит дорого в плане ресурсов надо?
Так же по моему очевидно, что если можно пожертвовать files/nis/etc которые умеет системный ресолвер и взять что-то маленькое и быстрое типа adns или asr, то будет и быстрее и легче чем обернутое семейство getXXXbyYYY()
разве я где-то говорил о том, что async_resolve будет быстрее? это первое.
второе - "стоит дорого в плане ресурсов надо" - ну простите, я не заметил что сабж предполагается использовать на МК.
третье - async_resolve я предложил для того, чтоб ТС`у не пришлось делать то, что ему нарекомендовали на второй странице(потоки/очередь/блокировки).
четвертое - насколько я понял его архитектуру и проблему, я представил, что если резолв сделать асинхронным по отношению к тому потоку в котором у него что-то выполняется, то это избавит его от тормозов которые мешают каким-то вычислениям. а кода при этом - понты

спасибо.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
20.06.2011, 11:36
Вы уж простите, ну "не калькулятор" ни разу не аргумент. Помниться ТС говорил про что-то типа 30 итераций в секунду, т.е. получиться 30 нитей, вроде и не очень много, но вот зачем???

Касательно "не придется делать и понты" вы же думаю прекрасно понимаете, что в потрохах async_resolv примерно тот же код, что и предлагается ТС, вот только вместо оптимального решения с одним потоком и очередью либо сразу куча потоков либо один поток на n имен.
Писать то да, меньше, с этим никто не поспорит. А вот качество решения получается хуже.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.06.2011, 12:11
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
30 нитей, вроде и не очень много, но вот зачем?
не нужно сравнивать все с пальцем

Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
качество решения получается хуже
к сожалению, я не на столько компетентен, чтоб сомневаться в качестве кода asio, или чего бы то ни было входящего в boost. и тем более я уверен в том, что не напишу лучше
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
20.06.2011, 12:21
про палец не понял.

Речь не о качестве кода, а о качестве решения. Если вы считаете ,что не в состоянии родить ничего лучше чем универсальные, а следовательно далеко не оптимальные решения boost, то могу только посочувствовать, но все таки думаю, что произошло не до понимание контекста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2011, 12:21
Помогаю со студенческими работами здесь

Обработка всех запросов, поступающих на сервер
День добрый. Пишу анонаниамйзер, возник вопрос, как сохранить дерево каталогов донора в строке браузера? Т.е пример юзеру нужно...

Обработка строк, поступающих через COM порт
Доброго времени суток Необходимо обрабатывать строки сообщений поступающие по COM порту В Python 3.6 есть модуль parser Думаю применить...

Реализация задержки с использованием цикла
Перенесено из темы: https://www.cyberforum.ru/cmd-bat/thread1537879.html Многие интересуются, как сделать задержку по времени в...

Передача данных в регистр без использование цикла
Добрый день, прошу помощи. В данный момент в базе существует регистр накопления, который учитывает товары из документа о поступлении. То...

Scanner без задержки
Я, если честно, хреновый пользователь jav'ой, но кое-что знаю. Так вот: когда мы пишем стандартный sc.nextInt() (пусть int) всё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru