Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Посоветуйте multithread-шаблон / 7 сообщений из 7, страница 1 из 1
01.10.2012, 06:33:45
    #37977793
shainsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте multithread-шаблон
Есть N однотипных упорядоченных задач, которые должны выполняться в M потоков.
На каждое задание отводится не более L секунд, по их истечению выполнение должно прерываться.
Посоветуйте подходящий шаблон проектирования (или готовую реализацию).
...
Рейтинг: 0 / 0
01.10.2012, 11:11:12
    #37978072
ResidentR6
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте multithread-шаблон
Есть обычные реализации типа серьёзных фреймворков.
А если не заморачиваться - погугли понятие "пул потоков", под это есть
свои классы.

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

Ставить таймаут на весь поток некошерно. Таймаут нужно ставить именно на
ту операцию, где он может произойти. И оттуда же выкидываешь свой класс
эксепшена, который сам же потом ловишь и сам же знаешь как именно его
обработать, как именно его логировать, как показывать для системы
мониторинга.

Если поставишь таймаут на поток, то скроешь в будущем возможные ошибки.
Если таймаута нет, увидишь где потоки блокируются. Но если он есть -
ошибку двойной блокировки не поймаешь. А шансы на неё нарваться есть
всегда, и тем выше чем сложнее логика.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.10.2012, 11:14:38
    #37978079
ResidentR6
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте multithread-шаблон
По сути задача сделать своего наследника Thread, и засунуть их в обычный
пул потоков.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.10.2012, 11:31:50
    #37978119
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте multithread-шаблон
ResidentR6По сути задача сделать своего наследника Thread, и засунуть их в обычный
пул потоков.

Всё нужное для запуска уже есть в ExecutorServices. Но на счет того как именно контролировать выполнение, вы правы. Нужно выбирать стретегию в зависимости от конкретики.
Начать стоит, конечно же с CancellableTask.
...
Рейтинг: 0 / 0
01.10.2012, 11:37:47
    #37978130
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте multithread-шаблон
shainskyНа каждое задание отводится не более L секунд, по их истечению выполнение должно прерываться.
Посоветуйте подходящий шаблон проектирования (или готовую реализацию).
Тут нужно очень много конкретики значть, чтобы выбрать правильное решение. Что именно делают ваши задачи?
Вопросы примерно следующие
- Может ли задача прервать себя сама, проверяя таймер на некоторых этапах?
- Какие ресурсы задача потребляет CPU или IO ? IO проще прервать по interrupt.
- На сколько критична вариация по времени?

А так, берите ExecutorService, CancellableTask и какой-нибудь таймер. При запуске таски, устанавливаете таймер на нужное время, таймер проверяет время и решает выставить ли таске флаг Canceled.
...
Рейтинг: 0 / 0
01.10.2012, 13:44:15
    #37978473
shainsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте multithread-шаблон
Blazkowicz,

Да, спасибо, я уже тоже нагуглил ExecutorService. "Покурю" CancellableTask.
Задачи - чтение из стороннего URL.
...
Рейтинг: 0 / 0
01.10.2012, 13:53:02
    #37978495
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте multithread-шаблон
shainskyДа, спасибо, я уже тоже нагуглил ExecutorService. "Покурю" CancellableTask.
Задачи - чтение из стороннего URL.
Тогда interrupt надо использовать, чтобы блокирующее IO выкидывало исключение и обрабатывалось. Надо только посмортреть, чтобы поток при этом дальше использовался в пуле нормально.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Посоветуйте multithread-шаблон / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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