powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помоги советом про многопоточность!
16 сообщений из 16, страница 1 из 1
Помоги советом про многопоточность!
    #37972016
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть задачи, скажем A,B,C,D.
Нужно чтобы они выполнялись друг за другом строго в порядке A->B->-C->D, и такая последовательность в свою очередь должна выполниться скажем 100 раз.

Сейчас я создаю CyclicBarrier для внешнего цикла(100 повторений), а строгий порядок следования обеспечиваю с помощью lock и condition и связывающего объекта.

Насколько это правильно для рассмотренной задачи и как это сделать правильно.
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972017
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем многопоточтость, если одновременно ничего не выполняется?
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972023
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне тоже непонятно зачем многопоточность в данном контексте.

Но сама задача недавно обсуждалась.
Посылайте все таски в Executor.newSingleThreadExecutor().
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972025
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманА зачем многопоточтость, если одновременно ничего не выполняется?
Я не очень понятно описал вопрос) Задачи A,B,C,D довольно затратные сами по себе. Желательно их выполнять параллельно.
Но если рассмотреть каждую из них, то каждую из них можно поделить на две части, назовем их "начало задачи А" и "конец задачи А". Та вот "начало задачи В" должно начать выполнять только после того как выполнилось "начало задачи А". Надеюсь так понятнее.
Т.е. "конец задачи А" и "начало задачи В" могут выполняться параллельно.
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972042
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может инкапсулировать асихронную часть непосредственно в задаче?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//в задачах

void doTheJob(){

//   ... do sth

   new Thread(new Runnable(){  run() {  .. do rest of work } } ) .start();// ну или через Executor
}

//в основном потоке

A.doTheJob();
B.doTheJob();
...



P.S. закидайте если что, тоже интересно
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972055
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лагман, я сейчас в каждой задаче выполняю "начало задачи" и делаю condition.await(), после прихода сигнала выполняется "конец задачи". Но мне кажется это не много криво. Если задач 2-4 то еще нормально, а если их скажем 20-40?
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972089
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему нельзя на отдельные таски разбить?
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972091
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никА почему нельзя на отдельные таски разбить?
Я же не говорю что нельзя, можно конечно. Я спрашиваю как это оформить правильно.
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972098
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну чем независимее таск тем лучше.
А в чем ваша трудность? Делите А на А1 и А2, Когда заканчивается А1 посылаете А2, и тд.
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972197
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никНу чем независимее таск тем лучше.
А в чем ваша трудность? Делите А на А1 и А2, Когда заканчивается А1 посылаете А2, и тд.
Дело в том, что эта последовательность A->B->C->D циклически повторяется много раз(от 100 и более) создавать столько однотипных тасков? насколько это правильно?
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972227
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmстрогий порядок следования обеспечиваю с помощью lock и condition и связывающего объекта.Как вариант, можно воспользоваться приоритетами потоков
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972987
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmзабыл никНу чем независимее таск тем лучше.
А в чем ваша трудность? Делите А на А1 и А2, Когда заканчивается А1 посылаете А2, и тд.
Дело в том, что эта последовательность A->B->C->D циклически повторяется много раз(от 100 и более) создавать столько однотипных тасков? насколько это правильно?
Ну а что у вас вызывает сомнение? Успешное многопоточное программирование заключается в том, чтобы основательно проработать задачу и определить какие части задачи могут выполняться параллельно а какие нет, а сколько тасков - не играет особого значения, если конечно использовать пул потоков и ExecutorService. Я так до конца и не понимаю вашу задачу, но предположим вот такой вариант.
Допустим, вам нужно обработать каждую страницу гипотетического веб -сайта, допустим что эту задачу можно разбить на подзадачи, которые строго зависят одна от одной - 1) Вычитать страницу 2) Сохранить страницу в базу и получить айди страницы 3) Найти все гиперссылки на странице 4) Отфильтровать ссылки которые уже есть и опять же сохранить в базу. Пусть это будут A, B, C, D.
Также предположим что у вас есть код инициализации, который каким-то образом получает 10 начальных страниц для индексации.
Вы создаете 4 ExecutorService для каждого типа подзадач. Очевидно что все A могут выполняться параллельно - поэтому посылаем их в первый экзекьютор, в конце работы A он посылает таск B во второй экзекьютор, B посылает C в третий и тп, таким образом вам не нужна внешняя синхронизация и параллельность максимальна. Конечно вводить таски в одну строчку это тоже перебор, но на практике чем лучше раздробить основную задачу на мелкие обособленные задачи тем лучше.
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37972989
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanrdmстрогий порядок следования обеспечиваю с помощью lock и condition и связывающего объекта.Как вариант, можно воспользоваться приоритетами потоков

Очень стремный вариант
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37973068
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmзабыл никНу чем независимее таск тем лучше.
А в чем ваша трудность? Делите А на А1 и А2, Когда заканчивается А1 посылаете А2, и тд.
Дело в том, что эта последовательность A->B->C->D циклически повторяется много раз(от 100 и более) создавать столько однотипных тасков? насколько это правильно?
Ваше возражение мне совершенно непонятно. А сейчас у вас сколько таксов? разве не 400? Ну будет 800, но как вы сказали, они довольно тяжеловесные, так что затраты на синхронизацию будут незаметны.

И вообще, что вы подразумеваете под словом "таск"? Runnable под управлением Executor'a или Thread?

Мне кажется, вы не перешли в систему координат параллельного программирования. Для вас задача - это нечто замкнутое с точки зрения бизнес-логики, в то время как для выявления и эксплуатации параллельности нужно выявить параллельные участки и сформулировать зависимости по данным. В результате должен получиться ациклический граф, гда каждый узел - это элементарная задача, которая дождалась входных данных, испустила из себя выходные данные и умерла. Повторять ее нет смысла, так как результат будет тот же самый. Если граф большой (или неопределенного размера), его можно генерить в процессе работы (создавать новые узлы динамически).
Далее, при реализации, можно программистские объекты переиспользовать, для экономии памяти, так что один и тот же объект будет представлять разные задачи. Но это надо делать осторожно, чтобы не дай бог, объект не оказался задействован в одновременно выполняемых задачах, и понимать, что это - оптимизация, и ее надо делать в конце, когда все ясно. Преждевременная оптимизация - корень всех бед. Вы же с этой оптимизации начинаете, когда хотите повторять свой небольшой набор задач несколько раз. Неудивительно, что у вас возникают проблемы - просто потому, что вы искусственно задали себе ограничения (4 задачи по 100 раз), и спрашиваете публику, как вам в эти ограничения уложиться. А никак. Вы обрисуйте задачу как она есть, без ограничений, и мы подскажем.
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37973173
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdm,

я люблю велосипеды, потому сделал бы для начала так:


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
private void velosiped() throws InterruptedException {
        ExecutorService executorService = Executors.newFixedThreadPool(4);
        List<TaskQueue> list = new ArrayList<TaskQueue>();
        TaskQueue taskQueue1 = new TaskQueue(new ArrayList<Callable<Boolean>>());
        TaskQueue taskQueue2 = new TaskQueue(new ArrayList<Callable<Boolean>>());
        list.add(taskQueue1);
        list.add(taskQueue2);
        List<Future<Boolean>> futures = executorService.invokeAll(list);
    }

    class Task implements Callable<Boolean> {
        @Override
        public Boolean call() throws Exception {
            return true;
        }
    }

    class TaskQueue implements Callable<Boolean> {
        private List<Callable<Boolean>> callableList;

        public TaskQueue(List<Callable<Boolean>> callableList) {
            this.callableList = callableList;
        }

        @Override
        public Boolean call() throws Exception {
            for (Callable<Boolean> callable: callableList) {
                callable.call();
            }
            return true;
        }
    }
...
Рейтинг: 0 / 0
Помоги советом про многопоточность!
    #37973177
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

то есть последовательность выполнения, если вопрос именно в ней, обеспечил бы обычным List, завернув его в свой Callable или Runnable класс ;)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Помоги советом про многопоточность!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]