我正在編寫一個需要穩定性和高性能的多線程服務器應用程序。我正在尋找使用Boost來處理我需要的一些數據結構。侵入式或非侵入式
對於某些應該線程安全且需要快速訪問,插入等的應用程序來說,是一種侵入性數據結構更好還是更壞::::?
我正在編寫一個需要穩定性和高性能的多線程服務器應用程序。我正在尋找使用Boost來處理我需要的一些數據結構。侵入式或非侵入式
對於某些應該線程安全且需要快速訪問,插入等的應用程序來說,是一種侵入性數據結構更好還是更壞::::?
侵入式數據結構本質上並非比非侵入式數據結構更好或更差。
最好的選擇是不要在線程之間共享數據。如果線程需要共享數據,第二個最佳選擇是隻讀數據結構,因此不需要同步。
共享數據結構是線程之間的通信路徑。因此,您需要仔細考慮是否擁有直接共享的數據結構是最佳的通信手段。你需要什麼數據結構?消息隊列是否足夠?你需要併發訪問相同的數據,還是需要不同的線程訪問數據結構的不同部分?
沒有關於侵入式數據結構的信息,這些數據結構使得它們比一般用於多線程的替代品更好或更差。
侵入式數據結構本質上是不同的,任何侵入式數據結構都可以變成非侵入式數據結構。侵入式結構更快(不需要額外的指針取消引用)並且需要更少的內存(節點不需要額外的塊)。他們面臨的最大問題是他們要求每個列表在結構中都有自己的領域(從C的角度來看)。 – wj32 2010-09-29 09:03:42
@ wj32您所描述的細節非常依賴於被比較的侵入式和非侵入式數據結構的實現。侵入式數據結構的唯一定義屬性是與每個數據項關聯的數據結構管理信息位於數據項本身中(因此是用戶可見的),並且數據項由用戶分配。這並不意味着速度或內存要求。 – 2010-09-29 09:25:10
事實上,每個節點的信息都嵌入在結構本身中,使侵入式數據結構更快。什麼侵入式數據結構需要更多次地分配內存(如果有的話)比同一類型的非侵入式數據結構?我不知道C++是如何工作的,但我可以告訴你,在C語言中,很明顯,例如,一個侵入式雙向鏈表比非侵入鏈表快得多。 – wj32 2010-09-29 10:39:11
如果你的內在細節最好隱藏在窺探之下,這會不會更容易?使擴展和使用起來更容易,並且不會將用戶綁定到內部細節。 – DumbCoder 2010-09-29 08:26:35
那麼你說的是非侵入性的呢? – 2010-09-29 08:33:08
你能對比你的需求與這裏的討論:http://stackoverflow.com/questions/928827/best-data-structure-for-this-multithreaded-use-case-is-intrusive-list-good – 2010-09-29 08:43:51