Использует ли boost :: asio :: deadline_timer поток для каждого таймера? - PullRequest
9 голосов
/ 09 марта 2010

У меня есть список элементов, которые мне нужно обновлять через разные промежутки времени. Список может вырасти до тысячи предметов. Каждый элемент может иметь другой интервал. Если я создаю один таймер для каждого элемента, я собираюсь насытить систему потоками? Я подумал, что может быть лучше создать один таймер, равный наименьшему интервалу в наборе элементов, а затем при каждом обновлении увеличивать счетчик, а затем проверять, равен ли теперь счетчик другим интервалам. Это должно работать при условии, что наименьший интервал кратен всем остальным интервалам. Есть предложения?

Ответы [ 2 ]

12 голосов
/ 09 марта 2010

Boost не использует поток для таймера, он поддерживает очередь таймера.Каждый таймер создается с помощью объекта boost::asio::io_service, который выполняет фактическую работу.

Этот объект может распределять свою работу в одном или нескольких потоках, при явном запуске boost::asio::io_service::run() из нескольких потоков ,но между таймерами и потоками нет однозначного соответствия, и Asio не будет создавать темы за вашей спиной.

1 голос
/ 10 марта 2013

Последние версии Asio, Boost 1.43 и более поздних версий, используйте API timerfd_create(2) в Linux для deadline_timer с.

Изменено использование timerfd для диспетчеризации таймеров в Linux, когда имеется.

...