Реализовал многопоточный исполнитель, присутсвует только атомарная синхронизация с помощью volatile.
Все потоки общаются с помшью каналов передавая друг другу задачи для исполнения. Задачи передаются через специальный списки, очередь с возможность изьятия за O(1) , в данный момент только в LinkdedQueue, в ArrayQueue O. Разница между ними, то что LinkedQueue активно потребляет память, в то в время как ArrayQueue массив, который расширяется по необходимость, в общем может кому будет надо, все довольно просто, реализация не сильно объемна в коде.
Цель. Понадобилось ручное управление потока исполениния сложных задач, так как ForkJoinPool не представляется средства ручной балансировки нагрузки, там используется алгоритм "кражи" нагрузки. Очень интересная реализация ForkJoinPool, когда не можешь понять как работает код. Танцы с бубном, забавно, когда ForkJoinPool реализован с помощью магии.
ПС sun.misc.Contended решает проблемы
Все потоки общаются с помшью каналов передавая друг другу задачи для исполнения. Задачи передаются через специальный списки, очередь с возможность изьятия за O(1) , в данный момент только в LinkdedQueue, в ArrayQueue O. Разница между ними, то что LinkedQueue активно потребляет память, в то в время как ArrayQueue массив, который расширяется по необходимость, в общем может кому будет надо, все довольно просто, реализация не сильно объемна в коде.
Цель. Понадобилось ручное управление потока исполениния сложных задач, так как ForkJoinPool не представляется средства ручной балансировки нагрузки, там используется алгоритм "кражи" нагрузки. Очень интересная реализация ForkJoinPool, когда не можешь понять как работает код. Танцы с бубном, забавно, когда ForkJoinPool реализован с помощью магии.
ПС sun.misc.Contended решает проблемы