나는 여기서 수정 된 Kademlia P2P 시스템을 작성하고 있지만 여기서 설명하는 문제는 원래 구현과 매우 유사합니다.Effiencient Kademlia Buckets
그래서 k- 버킷을 구현하는 가장 효율적인 방법은 무엇입니까? 내게 중요한 것은 액세스 시간, 병렬 처리 (읽기 & 쓰기) 및 메모리 절약입니다.
ConcurrentLinkedQueue 및 ConcurrentHashMap을 사용하여 생각하고 있지만 꽤 복잡하고 불쾌한가요?
지금은 단순히 LinkedList를 동기화하고 있습니다.
import java.util.LinkedList;
class Bucket {
private final LinkedList<Neighbour> neighbours;
private final Object lock;
Bucket() {
neighbours = new LinkedList<>();
lock = new Object();
}
void sync(Neighbour n) {
synchronized(lock) {
int index = neighbours.indexOf(n);
if(index == -1) {
neighbours.add(n);
n.updateLastSeen();
} else {
Neighbour old = neighbours.remove(index);
neighbours.add(old);
old.updateLastSeen();
}
}
}
void remove(Neighbour n) {
synchronized(lock) {
neighbours.remove(n);
}
}
Neighbour resolve(Node n) throws ResolveException {
Neighbour nextHop;
synchronized(lock) {
int index = neighbours.indexOf(n);
if(index == -1) {
nextHop = neighbours.poll();
neighbours.add(nextHop);
return nextHop;
} else {
return neighbours.get(index);
}
}
}
}
가 나는 또 다른 이웃 퇴거 과정을 구현 한, 궁금하지 마십시오 :
여기 내 코드입니다.