2013-07-13 48 views
1

我正在研究一個玩具/實驗,它需要DNS服務來獲取本地網絡上特定節點的位置/地址信息。它還將存儲其他信息,例如節點類型,套接字類型(enet-udp或tcp)以及一些其他特定的數據位。數字類型中的大部分(或可能全部)。每個條目將通過客戶端ID與特定的客戶端相關聯,每個客戶端在節點內都有自己的線程。提升速度最快的容器有哪些?

我的問題是哪些增強包可以通過數字ID提供絕對最快的訪問?雖然它可能永遠不會實現,但它的想法是,該服務可能會增長到未知數,從而在跨多個節點的線程內爲數千個客戶端管理IPC。

換句話說,容器必須快速並且能夠增長。如果增長能力導致訪問時間成本大於設定容量的容器會更可取,但可變大小是理想的。插入時間並不重要,也不會維護容器內部結構中的數據順序。

這種類型的容器/結構是錯誤的地方嗎?這是我第一次對增強或甚至整個C++結構非常挑剔,所以期待着學習新的東西。

感謝

+1

每個客戶端一個線程?聽起來很糟糕。顯式存儲狀態,並按服務器的能力提供線程。每個ckient預訂一個真實線程意味着緩慢的上下文切換,顯式狀態意味着您只需切換狀態。 – Yakk

+0

@Yakk - 你的權利,但現在線程不會做任何事情,只能說回來。 – JSON

+2

如果你不關心表現,那麼你的問題的重點是什麼?微觀優化是一個不好的主意:如果你有玩具,就把它寫得快而且鬆散,如果你沒有把玩具專注於重要的部分,比如丟棄你的單線程客戶端,而不是「什麼是最快的容器「。容器將在稍後成爲瓶頸,如果需要,應該很容易取出並更快地交換內容:假設基於線程的狀態不會很容易換出的模型。 – Yakk

回答

2

首先,只是花點時間,以確保此查找其實將是你的應用的瓶頸之一(如果你正在做的I/O任何內部查找可能會是無關緊要)。

如果您可以在數字ID上設置上限(最大值),並滿足未增長的絕對最快速度,則可以獲得預先保留的向量。

否則,最有可能的候選人將會是一個散列(來自C++ 11或boost的unordered_map)。哈希將有恆定的時間查找,但請注意負載因素以及何時增長。

+0

unordered_map ia看起來像它會爲我所需要的。謝謝 – JSON