2013-07-13 2 views
1

저는 로컬 네트워크상의 특정 노드의 위치/주소 정보에 대해 DNS와 같은 서비스가 필요한 장난감/실험을하고 있습니다. 노드 유형, 소켓 유형 (enet-udp 또는 tcp) 및 기타 몇 가지 특정 데이터 비트와 같은 기타 정보도 저장합니다. 대부분의 (또는 아마도 모든) 숫자 유형. 각 항목은 클라이언트 ID별로 특정 클라이언트와 연관되며, 각 클라이언트는 노드 내에서 자체 스레드를가집니다.부스트에서 사용할 수있는 가장 빠른 컨테이너는 무엇입니까?

제 질문은 어떤 부스트 패키지가 숫자로 된 ID로 가장 빠른 액세스를 제공합니까? 결코 실현 될 수는 없겠지만, 서비스는 알려지지 않은 숫자로 성장하여 여러 노드의 스레드에서 수천 개의 클라이언트에 대한 IPC를 관리 할 수 ​​있습니다.

즉, 컨테이너가 빠르며 성장할 수 있어야합니다. 성장 능력이 액세스 시간에서 급격한 비용을 초래하는 경우 컨테이너 크기가 바람직하지만 가변 크기가 이상적입니다. 삽입 시간은 중요하지 않으며 컨테이너 내부 구조 내의 데이터 순서를 유지 관리하지도 않습니다.

이 유형의 컨테이너/구조에 대한 잘못된 위치가 강조됩니까? 이것은 내가 boost 또는 C++ 구조에 대해 매우 까다롭게 여겨야하므로 처음으로 새로운 것을 배울 것을 고대합니다.

감사

+1

클라이언트 당 하나의 스레드? 나쁜 생각처럼 들리 네요. 상태를 명시 적으로 저장하고 서버 기능으로 스레드를 제공합니다. ckient 당 실제 스레드를 예약한다는 것은 컨텍스트 전환이 느리다는 것을 의미합니다. 명시 적 상태는 상태를 전환해야 함을 의미합니다. – Yakk

+0

@Yakk - 당신의 권리,하지만 지금은 스레드가 아무것도하지 않고 다시 얘기하지 않을 것입니다. – JSON

+2

성능에 신경 쓰지 않는다면 질문의 요점은 무엇입니까? 마이크로 최적화는 나쁜 아이디어입니다. 장난감을 가지고 있으면 빠르게 작성하고 느슨하게 작성하십시오. 그리고 "문제"가 아닌 클라이언트 당 하나의 쓰레드를 폐기하는 것과 같은 중요한 부분에 장난감 중심을 두지 않는다면, 가장 빠른 컨테이너는 무엇입니까? " 컨테이너는 나중에 병목 현상이 될 것이므로 필요한 경우 빨리 꺼내서 뭔가 바꾸는 것이 정말 쉬워야합니다. 스레드 기반 상태를 추정하는 모델은 쉽게 스왑 아웃되지 않습니다. – Yakk

답변

2

첫째, 그냥 검색하면 I/O를 내부 조회 아마 관련이없는 것하고 있다면 (응용 프로그램의 병목 현상 중 하나가 될 것 사실이 있는지 확인하려면 잠시 시간을내어).

숫자 ID에 뚜껑 (최대 값)을 설정하고 얻을 수있는 가장 빠른 속도로 성장하지 않는 콘텐츠 인 경우 사전 예약 된 벡터가됩니다.

그렇지 않으면 가장 가능성이있는 후보는 해시입니다 (unordered_map C++ 11 또는 부스트). 해시에는 일정한 시간 조회가 있지만로드 요소와 성장할 때주의를 기울여야합니다.

+0

unordered_map ia처럼 보이는 것은 내가 필요한 것에 효과가 있습니다. 감사 – JSON

관련 문제