
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
01.10.2012, 06:33:45
|
|||
|---|---|---|---|
|
|||
Посоветуйте multithread-шаблон |
|||
|
#18+
Есть N однотипных упорядоченных задач, которые должны выполняться в M потоков. На каждое задание отводится не более L секунд, по их истечению выполнение должно прерываться. Посоветуйте подходящий шаблон проектирования (или готовую реализацию). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.10.2012, 11:11:12
|
|||
|---|---|---|---|
|
|||
Посоветуйте multithread-шаблон |
|||
|
#18+
Есть обычные реализации типа серьёзных фреймворков. А если не заморачиваться - погугли понятие "пул потоков", под это есть свои классы. А вот с таймаутами так предвзято не относись. Если задача реальная (не учебная), то за каждым таймаутом стоит что-то недоделанное, какая-то реакция, нужно собрать какую-то статистику, избегать (перехватывать) срать в лог типичными таймаутами (типа сетевой ошибки). Ставить таймаут на весь поток некошерно. Таймаут нужно ставить именно на ту операцию, где он может произойти. И оттуда же выкидываешь свой класс эксепшена, который сам же потом ловишь и сам же знаешь как именно его обработать, как именно его логировать, как показывать для системы мониторинга. Если поставишь таймаут на поток, то скроешь в будущем возможные ошибки. Если таймаута нет, увидишь где потоки блокируются. Но если он есть - ошибку двойной блокировки не поймаешь. А шансы на неё нарваться есть всегда, и тем выше чем сложнее логика. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.10.2012, 11:14:38
|
|||
|---|---|---|---|
|
|||
Посоветуйте multithread-шаблон |
|||
|
#18+
По сути задача сделать своего наследника Thread, и засунуть их в обычный пул потоков. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.10.2012, 11:31:50
|
|||
|---|---|---|---|
|
|||
Посоветуйте multithread-шаблон |
|||
|
#18+
ResidentR6По сути задача сделать своего наследника Thread, и засунуть их в обычный пул потоков. Всё нужное для запуска уже есть в ExecutorServices. Но на счет того как именно контролировать выполнение, вы правы. Нужно выбирать стретегию в зависимости от конкретики. Начать стоит, конечно же с CancellableTask. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.10.2012, 11:37:47
|
|||
|---|---|---|---|
|
|||
Посоветуйте multithread-шаблон |
|||
|
#18+
shainskyНа каждое задание отводится не более L секунд, по их истечению выполнение должно прерываться. Посоветуйте подходящий шаблон проектирования (или готовую реализацию). Тут нужно очень много конкретики значть, чтобы выбрать правильное решение. Что именно делают ваши задачи? Вопросы примерно следующие - Может ли задача прервать себя сама, проверяя таймер на некоторых этапах? - Какие ресурсы задача потребляет CPU или IO ? IO проще прервать по interrupt. - На сколько критична вариация по времени? А так, берите ExecutorService, CancellableTask и какой-нибудь таймер. При запуске таски, устанавливаете таймер на нужное время, таймер проверяет время и решает выставить ли таске флаг Canceled. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.10.2012, 13:44:15
|
|||
|---|---|---|---|
|
|||
Посоветуйте multithread-шаблон |
|||
|
#18+
Blazkowicz, Да, спасибо, я уже тоже нагуглил ExecutorService. "Покурю" CancellableTask. Задачи - чтение из стороннего URL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.10.2012, 13:53:02
|
|||
|---|---|---|---|
|
|||
Посоветуйте multithread-шаблон |
|||
|
#18+
shainskyДа, спасибо, я уже тоже нагуглил ExecutorService. "Покурю" CancellableTask. Задачи - чтение из стороннего URL. Тогда interrupt надо использовать, чтобы блокирующее IO выкидывало исключение и обрабатывалось. Надо только посмортреть, чтобы поток при этом дальше использовался в пуле нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2130869]: |
0ms |
get settings: |
14ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 273ms |
| total: | 426ms |

| 0 / 0 |
