HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 22.01.2017, 18:12
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Реализовал многопоточный исполнитель, присутсвует только атомарная синхронизация с помощью volatile.

Все потоки общаются с помшью каналов передавая друг другу задачи для исполнения. Задачи передаются через специальный списки, очередь с возможность изьятия за O(1) , в данный момент только в LinkdedQueue, в ArrayQueue O. Разница между ними, то что LinkedQueue активно потребляет память, в то в время как ArrayQueue массив, который расширяется по необходимость, в общем может кому будет надо, все довольно просто, реализация не сильно объемна в коде.

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

ПС sun.misc.Contended решает проблемы
 
Ответить с цитированием

  #2  
Старый 22.01.2017, 18:13
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

 
Ответить с цитированием

  #3  
Старый 23.01.2017, 18:57
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Добавил поток исполнения, теперь можно программировать поток исполнения с назначенным контекстом.

Цитата:
Сообщение от Спойлер  


Код:


[CODE]
package concurrent.samples;

import concurrent.WorkerService;
import concurrent.subroutine.Flow;
/*
* long count = 0;
* long time = System.currentTimeMillis() + 1000;
* while(true) {
* count++;
* if(time

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



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.