Каковы рабочие потоки и какова их роль в структуре реактора?

Я пытаюсь понять шаблон Reactor (одновременный), но во многих примерах они говорят о "рабочих потоках". Что такое рабочие потоки? Чем они отличаются от "обычных" тем? И какова их роль в схеме реактора?

Ответы

Ответ 1

Образец Reactor используется с рабочими потоками для преодоления общего сценария в приложениях: вам нужно в конце концов много работать, но вы не знаете, какая работа и когда и создание потоков - дорогостоящая операция.

Идея заключается в том, что вы создаете много потоков, которые вначале ничего не делают. Вместо этого они "ждут работы". Когда приходит работа (в виде кода), какая-то служба-исполнитель (реактор) идентифицирует простаивающие потоки из пула и назначает им работу.

Таким образом, вы можете заплатить цену за создание всех потоков один раз (и не каждый раз, когда нужно выполнить некоторую работу). В то же время ваши потоки являются общими; они будут выполнять любую работу, назначенную им вместо того, чтобы быть специализированным, чтобы сделать что-то конкретное.

Для реализации рассмотрите пулы потоков.

Ответ 2

Я предполагаю, что вы говорите о чем-то вроде этой документации по пулам потоков:

Большинство реализаций исполнителя в java.util.concurrent используют пулы потоков, которые состоят из рабочих потоков. Этот вид потока существует отдельно от задач Runnable и Callable, которые он выполняет, и часто используется для выполнения нескольких задач.

Рабочие потоки - это обычные потоки, но они существуют отдельно от классов Runnable или Callable которыми они работают. Если вы расширяете Thread или создаете Thread с помощью аргумента Runnable, задача напрямую связывается с объектом Thread.

При создании пула потоков с помощью Executors.newFixedThreadPool(10); (или другие подобные методы), вы создаете пул из 10 потоков, которые могут запускать любое количество различных классов Runnable или Callable, которые передаются в пул. Под крышками они все еще являются Thread более гибкой из-за того, как они обернуты.

С точки зрения схемы реактора, различные типы событий запускаются потоками обработчика, что аналогично. Поток не привязан к одному классу событий, но будет запускать любое количество различных событий по мере их возникновения.