Java 为什么';t不存在SkipList的并发版本

Java 为什么';t不存在SkipList的并发版本,java,collections,concurrency,skip-lists,Java,Collections,Concurrency,Skip Lists,我开始研究ConcurrentSkipListSet 从一开始我就试图理解斯基普利斯特是什么 我想是这样(可能的变体): 我有两个问题: SkipList与并发性的关系如何 为什么不存在 此数据结构的并发变体 任何数据结构都独立于并发性。请参阅collections包中的Java列表实现。LinkedList不是线程安全的,但您可以使用Collections类使其成为线程安全的 为SkipList编写实现的个人决定将线程安全性构建到类中。这是一项执行决定 任何数据结构都独立于并发性。请参阅co

我开始研究ConcurrentSkipListSet

从一开始我就试图理解斯基普利斯特是什么

我想是这样(可能的变体):

我有两个问题:

  • SkipList与并发性的关系如何
  • 为什么不存在 此数据结构的并发变体
  • 任何数据结构都独立于并发性。请参阅collections包中的Java列表实现。LinkedList不是线程安全的,但您可以使用Collections类使其成为线程安全的
  • 为SkipList编写实现的个人决定将线程安全性构建到类中。这是一项执行决定
  • 任何数据结构都独立于并发性。请参阅collections包中的Java列表实现。LinkedList不是线程安全的,但您可以使用Collections类使其成为线程安全的
  • 为SkipList编写实现的个人决定将线程安全性构建到类中。这是一项执行决定

  • 您的跳过列表有点不正确,它看起来更像:

    底部开始像一个链接列表,你已经得到了。。。但更多地将其视为与每一层相连的塔楼。这里的问题是,如果你想找到7,你可以从1->4->6->9跳到7。这使您可以使用链表近似平衡二叉树

    对于红黑树或AVL树,当需要修改结构时,有必要将其完全锁定,以便重新排列结构。另一方面,跳过列表可以在没有全局锁的情况下“重新排列”。删除7只需要将指向它的链接更改为指向下一个元素,这只需要在6元素上设置写锁,而不需要整个结构

    在介绍跳过列表的地方,有一本很好的书,它展示了它的工作原理和各种算法。在此范围内 是“表2-不同算法的计时和实现”,其中显示了跳过列表运行得相当快,尽管其中一些原因是因为它们使用了特定的数据

    在“跳过列表的其他工作”中

    我描述了一组算法,允许多个处理器同时更新共享内存中的跳过列表[Pug89a]。这种算法比并发平衡树算法简单得多。它们允许在由n个元素组成的跳过列表中有无限数量的读卡器和n个忙写器,并且锁争用很少

    这导致了另一篇名为的文章,该文章专门研究了一个由多个读者和作者组成的结构。这篇文章探讨了作者需要等待锁多长时间,以及结构的整体速度有多快

    因此,由于这些属性,它允许在结构中使用最小的锁定和结构平衡来实现多个读写器

    至于Java库中为什么没有一个非并发的跳过列表呢?这意味着将代码复制到另一个包中(这很糟糕)没有什么可以说你不能在不受并发问题约束的地方使用并发包。问题是他们需要两种类型的映射来进行并发工作,一种是O(1)HashMap,另一种是O(logn)由于TreeMap不能实现良好的并发实现,他们决定将其更改为SkipList

    相关阅读:


      • 您的跳过列表有点不正确,它看起来更像:

        底部一开始就像是一个链接列表,你已经知道了……但是你可以把它们更多地看作是每个级别链接到的塔。这里的问题是,如果你想找到7,你可以从1->4->6->9(哦,不),跳到7。这可以让你用链接列表近似一个平衡的二叉树

        对于红黑树或AVL树,当需要修改结构时,有必要将其完全锁定,以便重新排列结构。另一方面,跳过列表可以在不使用全局锁的情况下“重新排列”。删除7只需要将指向它的链接更改为指向下一个元素,这只需要写操作锁定6个元件,而不是整个结构

        在介绍跳过列表的地方,有一本很好的书,它展示了它的工作原理和各种算法 是“表2-不同算法的计时和实现”,其中显示了跳过列表运行得相当快,尽管其中一些原因是因为它们使用了特定的数据

        在“跳过列表的其他工作”中

        我已经描述了一组算法,允许多个处理器同时更新共享内存中的跳过列表[Pug89a]。该算法比并发平衡树算法简单得多。它们允许在n个元素的跳过列表中有无限数量的读卡器和n个忙碌的写卡器,并且几乎没有锁争用

        这导致了另一篇名为的文章,该文章专门深入研究了一个由多个读者和作者组成的结构。这将研究编写器需要等待锁多长时间,以及结构整体的加速速度

        因此,由于这些属性,它允许在结构中使用最小的锁定和结构平衡来实现多个读写器

        至于Java库中为什么没有非并发跳过列表?这意味着将代码复制到另一个包中(这是不好的),并且不会真正获得任何东西。没有什么可以说明您不能在不受并发问题约束的地方使用并发包。问题是他们需要两种类型的映射来进行并发工作,一种是O(1)HashMap,另一种是O(logn)树。由于TreeMap不能实现良好的并发实现,他们决定将其更改为SkipList

        联系