本文共 1210 字,大约阅读时间需要 4 分钟。
,,译者:许巧辉,校对:周可人
以目前针对演进条件(progress condition,注:参考[1])的算法和数据结构的分类来看,是不足以区分不同演进条件的能力和每一个演进条件的性能/延迟。
我们提出了一种新的“大O”记号来表示无等待的算法和数据结构。下面是它的工作原理:
一些示例:一个算法或功能被称为“Wait-Free O(x)“,表示需要最多O(x)操作完成。
根据当前表示法,示例a)、b)和c)都是”Wait-Free Bounded”,但示例b)显然比c)或a)更好。
根据当前表示法,示例d)、e)和f)都是”Wait-Free Population Oblivious”,崦示例d)显然比e)或f)更好
也许更有意思的是,示例b)可能比示例f)更好。特别地,如果N > NThreads,即使b)是”Bounded”而f)是”Population Oblivious”,它只是用来显示”Wait-Free Population Oblivious”未必比”Wait-Free Bounded”更好。
无锁如何?
那么,在这个新的表示法中,无锁也可以写成”Wait-Free O(infinity)”形式,但要注意的是,尽管所有的无锁算法都有一个最坏情况O(infinity),它们大多数都有一个预计的操作数O(1)或O(N),并且不依赖于线程的数量。
再比方说:
一个链表,对于contains()方法是无等待(Wait-Free)的,但这永远不会比”Wait-Free O(N_elements)”更好(N_elements是在某个时刻contains()操作时,链表中元素的数量)
匹配新旧之间的分类:
文章转自
转载地址:http://bgmdl.baihongyu.com/