Структурированный параллелизм Java

Структурированный параллелизм:

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

Источник

Исходя из этого, предположим, что у меня есть что-то вроде ниже:

      //can replace this with Virtual thread
public static void delegateTask() {
    Thread delegator = new Thread(new TaskDeligator());
    delegator.setName("TaskDeligatorThread");
    logger.info("Creating task delegator thread....which will register listeners");
    delegator.start();
}

Вопрос 1: Я создал новый дочерний поток ( TaskDeligatorThread ), но не завершил/завершил/воссоединился в том же блоке кода, то есть в методе delegateTask() . Значит ли это, что он не следует принципу структурированного параллелизма?

Вопрос 2: Могут быть сценарии, когда Thread1 хочет делегировать некоторую задачу дочернему потоку (который Thread1 создаст), и Thread1 не нужно ждать вывода/завершения дочернего потока. В этом случае я снова не буду завершать/завершать/воссоединяться с дочерним потоком в блоке кода, где он был создан. Как в таких сценариях я буду следовать структурированному параллелизму?

1 ответ

Фраза «в пределах одного блока кода» немного двусмысленна.

Строго говоря, ваш mainможет открыть StructuredExecutor и сделать его доступным для всего кода во всей вашей программе, так что вы используете поддержку библиотеки для структурированного параллелизма, но на самом деле не используете структурированный параллелизм. (Это примерно аналогично использованию for+switch для написания спагетти-кода, который технически не содержит «goto», но представляет собой то же самое.)

Оба ваших примера не следуют принципу структурированного параллелизма, потому что они предполагают разветвление задачи и отказ от нее. Потенциально вы можете переработать их, чтобы они следовали этому принципу, определив вызывающую сторону более высокого уровня, которая действительно зависит от этой задачи, и заставив эту вызывающую сторону более высокого уровня управлять StructuredExecutor. В качестве альтернативы вы можете решить, что на самом деле не хотите следовать этому принципу ни в целом, ни в этих случаях.

JEP на самом деле не объясняет концепцию структурированного параллелизма в деталях, потому что основное внимание уделяется тому, как его можно поддерживать в Java. Если вы хотите понять саму концепцию, я бы порекомендовал прочитать одну или обе записи в блоге, на которые она ссылается:

(Примечание: первое немного более технично, второе немного легче читать.)

Другие вопросы по тегам