Название: [Решено] Рациональное использование потоков Отправлено: sergek от Август 21, 2020, 08:47 Коллеги,
помогите, пожалуйста советом. Моя программа-сервер выполнена в виде сервиса Linux. Главный поток - это поток веб-сервера. Он выполняет две задачи - обеспечивает веб-интерфейс для пользователей и взаимодействие с другим сервером по REST API. В контексте веб-сервера создаются 4 объекта, которые выполняют 4 разных задачи ("вокера"). В каждом из этих объектов имеется свой отдельный таймер, запускающий с заданным интервалом выполнение своей задачи: 1) опрос через аппаратные интерфейсы периферийных устройств и получение текущих значений контролируемых параметров. Интервал опроса от 500 мс до нескольких сек.; 2) передача полученных текущих значений по REST API на другой сервер. Интервал - несколько сек.; 3) периодическая запись полученных значений в БД. Интервал - десятки сек.; 4) выполнение различных сценариев обработки параметров. Интервал - от секунд до десятков секунд. Т.е. понятно, что каждая задача работает с различными API (портами компьютера, СУБД, сетевыми интерфейсами). Я сделал так, что при запуске главного потока создаются еще 4 потока (по числу задач), и каждый объект задач перемещается в свой поток. Первую задачу я считаю приоритетной, поэтому потоку первой задачи я даю повышенный приоритет (HighPriority), остальные наследуют приоритет главного потока. Все отлично работает, но меня гложут смутные сомнения, что создание трех последних потоков ничего не дают в плане устойчивости и производительности работы сервера. Первый поток обоснован, т.к. ему выдается более высокий приоритет, чем у главного потока. С другой стороны, как обеспечивается работа задач, выполняемых по таймеру, если их оставить в главном потоке? Таймер сработал, но выполнение его слота откладывается, пока не выполнятся текущие части программы? Вопрос - обосновано ли использование перечисленных потоков для выполнения перечисленных задач? Я пробовал и так и эдак (все задачи в главном потоке), разницы, естественно, не ощутил. Но и всех возможных условий работы веб-сервера я смоделировать не могу. Может, опыт других что-то подскажет. upd. Компьютер, на чем все это работает - 64-битный 4-х ядерный ARM. Название: Re: Рациональное использование потоков Отправлено: Пантер от Август 21, 2020, 10:02 Я бы не парился - пусть живут каждый в своем потоке. Они же все равно большую часть времени спят.
Название: Re: Рациональное использование потоков Отправлено: RedDog от Август 21, 2020, 18:47 Если вызовы API не блокирующие, то можно при запуске создать пул потоков, равный количеству ядер, а по таймерам и/или другим триггерам, раскидывать задачи на этот пул.
Название: Re: Рациональное использование потоков Отправлено: sergek от Август 25, 2020, 13:10 Сделал для каждой задачи свой поток, установил на промплощадке, работает. Думаю, что так и оставлю - загрузка процессора не более 7%.
Спасибо за отклики. |