2010-09-29 44 views
2

我正在编写一个需要稳定性和高性能的多线程服务器应用程序。我正在寻找使用Boost来处理我需要的一些数据结构。侵入式或非侵入式

对于某些应该线程安全且需要快速访问,插入等的应用程序来说,是一种侵入性数据结构更好还是更坏::::?

+0

如果你的内在细节最好隐藏在窥探之下,这会不会更容易?使扩展和使用起来更容易,并且不会将用户绑定到内部细节。 – DumbCoder 2010-09-29 08:26:35

+1

那么你说的是非侵入性的呢? – 2010-09-29 08:33:08

+0

你能对比你的需求与这里的讨论:http://stackoverflow.com/questions/928827/best-data-structure-for-this-multithreaded-use-case-is-intrusive-list-good – 2010-09-29 08:43:51

回答

3

侵入式数据结构本质上并非比非侵入式数据结构更好或更差。

最好的选择是不要在线程之间共享数据。如果线程需要共享数据,第二个最佳选择是只读数据结构,因此不需要同步。

共享数据结构是线程之间的通信路径。因此,您需要仔细考虑是否拥有直接共享的数据结构是最佳的通信手段。你需要什么数据结构?消息队列是否足够?你需要并发访问相同的数据,还是需要不同的线程访问数据结构的不同部分?

没有关于侵入式数据结构的信息,这些数据结构使得它们比一般用于多线程的替代品更好或更差。

+0

侵入式数据结构本质上是不同的,任何侵入式数据结构都可以变成非侵入式数据结构。侵入式结构更快(不需要额外的指针取消引用)并且需要更少的内存(节点不需要额外的块)。他们面临的最大问题是他们要求每个列表在结构中都有自己的领域(从C的角度来看)。 – wj32 2010-09-29 09:03:42

+0

@ wj32您所描述的细节非常依赖于被比较的侵入式和非侵入式数据结构的实现。侵入式数据结构的唯一定义属性是与每个数据项关联的数据结构管理信息位于数据项本身中(因此是用户可见的),并且数据项由用户分配。这并不意味着速度或内存要求。 – 2010-09-29 09:25:10

+0

事实上,每个节点的信息都嵌入在结构本身中,使侵入式数据结构更快。什么侵入式数据结构需要更多次地分配内存(如果有的话)比同一类型的非侵入式数据结构?我不知道C++是如何工作的,但我可以告诉你,在C语言中,很明显,例如,一个侵入式双向链表比非侵入链表快得多。 – wj32 2010-09-29 10:39:11