Мне было интересно, есть ли какие-либо фреймворки с открытым исходным кодом (или проприетарные), которые бы имитировали параллельную очередь с приоритетами, которая позволяла бы просматривать и удалять из произвольного индекса с хорошей производительностью.
Сейчас я использую ConcurrentSkipList
, доступный в JDK, но в основном мне нужно поделиться этим между несколькими JVM.
Самая сложная часть, когда я опрашиваю очередь, я делаю что-то вроде этого:
List<Entry> dequeued = new ArrayList<>(thisManyIwant);
for(Entry entry : queue){
if(dequeued.size()>=thisManyIwant) break;
if(predicate.apply(entry)){
// Entry satisfies criteria
if(queue.remove(entry){
// OK, got it
dequeued.add(entry);
}else{
// damn, somebody took it before I could :(
}
}else{
// It's not something I want, move on to the next one.
}
}
return dequeued;
Некоторый распределенный кеш позволяет запрашивать, но эта операция требует высокой производительности, и я неЯ уверен, что если вы будете часто запрашивать кеш, это будет хорошей идеей.
Кто-нибудь слышал о такой вещи?