У меня есть класс, который я использую для управления созданием и уничтожением потоков, которые отвечают за отправку и получение сообщений CAN. Я не знаю, является ли это лучшим способом для этого, поэтому я ищу совет о том, как управлять своими потоками для отправки сообщений и получения сообщений.
В основном я хочу, чтобы spawnThread () порождал поток для объекта, переданного ему.
Итак, что-то с эффектом
spawnThread(T obj)
{
std::thread (&T::obj, this);
}
Я ожидал, что я буду использовать класс Thread для управления началом и окончанием потока для двух отдельных классов SendMessage и ReceiveMessage. Есть ли лучший способ обработки потоков для отправки и получения сообщений?
В OO нет такого понятия, как шаблон менеджера. Поток либо выполняет непрерывную работу, такую как ожидание соединений, либо выполняет одну операцию. Последний тип обычно является рабочими потоками, которые используются повторно.
Теперь подходит к вопросу. Потоки не масштабируются. Если у вас есть задачи отправки / получения, обработайте их в пуле рабочих потоков фиксированного размера. Как следствие, ваше приложение будет реагировать медленнее, если рабочая нагрузка увеличит размер пула, так как новый запрос должен ждать работника, но он будет продолжать работать.
Других решений пока нет …