Использует ли boost::asio::deadline_timer поток для каждого таймера?

StackOverflow https://stackoverflow.com/questions/2406095

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top