Примеры параллельной вселенной квазара

Я новичок в Quasar и хочу знать, есть ли примеры, подобные приведенным ниже. Или даже если бы кто-то мог указать мне правильное направление, как это сделать.

Итак, что мне нужно сделать, это прочитать файл json. Для каждого индекса создайте новый Fiber и передайте какое-то значение из json. Каждое волокно создаст функцию выполнения на основе значения из json. Но в зависимости от значения некоторые волокна могут занимать больше времени. Будет ждать максимум 5 секунд для завершения.

Я предполагаю, что все эти волокна будут работать параллельно.

Это вообще возможно? Любой пример был бы замечательным.


person NoName2    schedule 22.04.2016    source источник


Ответы (1)


Я являюсь частью команды Квазар.

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

Волокна используются так же, как и потоки (но гораздо более легкие): вы создаете их, позволяете им выполнять свою работу и присоединяетесь к ним. Похоже, что в вашем случае вам не нужно гораздо больше, чем это (хотя Quasar предлагает Go-подобные каналы, Erlang-подобные акторы и потоки данных, как для волокон, так и для потоков), поэтому я предлагаю вам взглянуть на документы по оптоволокну, есть также множество примеров, но я особенно рекомендую вам начать с шаблон Gradle.

Вы можете передать индекс/значение в качестве переменных закрытия экземпляру, созданному из анонимного класса, или вы можете создать именованный подкласс Fiber и получить их в качестве аргументов конструктора.

Не забудьте запустить агент. Если вам нужно создать исполняемый файл JAR с одним артефактом, включая агент, я предлагаю вам взглянуть на Capsule.

Также рассмотрите возможность присоединения к группе пользователей Quasar-Pulsar.

person circlespainter    schedule 24.04.2016
comment
ПРЕДУПРЕЖДЕНИЕ: волокно Fiber@10000007:fiber-10000007[задача: ParkableForkJoinTask@169b456(Fiber@10000007), цель: null, планировщик: co.paralleluniverse.fibers.FiberForkJoinScheduler@376cd890] перегружает ЦП или блокирует поток. Это ошибка, которую я получаю, когда пытаюсь вызвать свой класс в потоке. - person NoName2; 25.04.2016
comment
Это не ошибка, а предупреждение. Дополнительные сведения см. в документах ( подраздел убегающих волокон). - person circlespainter; 25.04.2016