![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Atum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Добрый день :
Нужна помощь, чего хочу добиться !? (система поиска! к поиску приходят запросы - в много потоков - они выстраиваются в очередь , и хранятся там не более 2х секунд ... есть несколько воркеров которые ищут ответы на поисковые запросы -и возвращают ответ пользователю ... если время на поиск ответа превышает время t то такой запрос перестает выполняться а Воркер берет новый запрос из очереди на исполнение.) и так заявки должны приходить в несколько потоков . как это организовать и смоделировать ? Что есть : класс список - который удаляет элементы из себя автоматом если они пролежали в нем больше 2-х секунд. Нет синхронизации :( при удалении и добавлении элементов (добавлять элементы могу многие потоки). Нужно как то следить за удалением и обработкой элементов. обрабатывать запросы - так же могут несколько Воркеров (забирать запросы и обрабатывать их возвращая пользователю ответ на его запрос ). к функции removeFirst() как раз и обращаются воркеры, когда один из них становится свободным .
|
||||
|
|||||
priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
Насколько я понял, основная проблема именно в этом. И наверное, ничего стандартного из Коллекций для хранения запросов не подойдет. Хотя могу ошибаться, конечно. Если все так, надо смотреть в сторону lock-free алгоритмов. Это сообщение отредактировал(а) priam220 - 17.5.2012, 16:32 |
|||
|
||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
http://docs.oracle.com/javase/6/docs/api/j...ge-summary.html
Скорее всего в качестве коллекции Вам подойдет http://docs.oracle.com/javase/6/docs/api/j...inkedQueue.html (если проблема все-так и в этом) |
|||
|
||||
Atum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
ConcurrentLinkedQueue мне кажется что это очень медленное и не эффективное решение ... ибо это универсальная штука ... а когда известно чего хочется то можно написать код более эффективно и не использовать ConcurrentLinkedQueue и пр. Но я могу и ошибаться ! ConcurrentLinkedQueue- отличное решение - для решения без оптимизации. Добавлено через 55 секунд
lock-free алгоритмов. можно по подробнее ? |
||||
|
|||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
Ну так чтобы не ошибаться, лучше ознакомьтесь с его реализацией. Вполне возможно, что он Вам и подойдет.
|
|||
|
||||
priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: 7 Всего: 8 |
Я как раз и имел ввиду что то вроде того, что предложил Ares4322, но он оказался еще круче (wait-free). Я думаю Вы вряд ли реализуете что то лучше, если только на языке более низкого уровня. |
|||
|
||||
Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Скажем так небольшой тест И пара вопросов :
poll vs remove - remove вызывает poll add vs offer - add - обертка над offer . В чем профит? LinkedBlockingQueue vs ConcurrentLinkedQueue ?
|
|||
|
||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
Непонятный тест. Добавляет один поток, выводит один поток.
Надо чтоб писало много потоков и читало много потоков. И тогда эти две реализации очереди можно будет сравнивать. А так они, конечно, одинаковы. Посмотри исходники этих двух классов. LinkedBlockingQueue при добавлении будет лочить доступ к очереди (т.е. это блокирующая очередь), а ConcurrentLinkedQueue использует CAS и блокировок внутри нет. Можно использовать и то, и то. Но ConcurrentLinkedQueue будет производительнее. Так как CAS быстрее локов. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |