CN114930297A - 单位值集的无锁读取 - Google Patents
单位值集的无锁读取 Download PDFInfo
- Publication number
- CN114930297A CN114930297A CN202080092112.8A CN202080092112A CN114930297A CN 114930297 A CN114930297 A CN 114930297A CN 202080092112 A CN202080092112 A CN 202080092112A CN 114930297 A CN114930297 A CN 114930297A
- Authority
- CN
- China
- Prior art keywords
- value
- variable
- updated
- variables
- barrier
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000004888 barrier function Effects 0.000 claims abstract description 123
- 238000012546 transfer Methods 0.000 claims abstract description 43
- 238000000034 method Methods 0.000 claims description 113
- 230000009471 action Effects 0.000 claims description 37
- 238000004891 communication Methods 0.000 claims description 5
- 230000008093 supporting effect Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 description 53
- 238000003860 storage Methods 0.000 description 52
- 230000000694 effects Effects 0.000 description 27
- 230000006870 function Effects 0.000 description 21
- 238000012545 processing Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 11
- 238000005056 compaction Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 238000012544 monitoring process Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 5
- 230000000644 propagated effect Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000001976 improved effect Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000002452 interceptive effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 239000003471 mutagenic agent Substances 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 230000007717 exclusion Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000008433 psychological processes and functions Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 241000237858 Gastropoda Species 0.000 description 1
- 241001465754 Metazoa Species 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000002155 anti-virotic effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 230000008450 motivation Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000000053 physical method Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 238000004801 process automation Methods 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000010408 sweeping Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000001755 vocal effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/522—Barrier synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/70—Details relating to dynamic memory management
- G06F2212/702—Conservative garbage collection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
- Memory System (AREA)
- Mobile Radio Communication Systems (AREA)
- Input From Keyboards Or The Like (AREA)
- Vehicle Body Suspensions (AREA)
- Lock And Its Accessories (AREA)
Abstract
垃圾收集器和其他软件可以利用高性能的无锁多线程软件。对变量集的统一无锁更新涉及更新值Z、释放屏障和获取屏障(它们对代码执行强制执行排序)、以及由变量对准产生的原子性。传送是通过值放置步骤和值取回步骤来完成的。值放置将Var1中的未更新值替换为Z,执行释放屏障,将其他变量的未更新值替换为更新值,执行另一释放屏障,并且将Z替换为Var1更新值。值取回从Var1读取到DestVar1A中,执行获取屏障,从其他变量读取到相应目的地变量中,执行另一获取屏障,从Var1读取到DestVar1B中,并且如果DestVar1A为Z或者如果DestVar1A和DestVar1B不相等,则重复。该解决方案将传送作为单元的更新值而没有锁定。
Description
背景技术
很多计算机程序包括多个执行线程。有时,线程被设计为在执行时相互协调。例如,生产者线程可以产生中间计算结果或另一项,生产者将该中间计算结果或另一项放入队列中。然后消费者线程从队列中取出项并且对其进行附加的工作。当生产者比任何单个消费者更快时,分离作业的生产者和消费者方面可以允许一个生产者向多个消费者提供项。分离生产者和消费者方面也可以促进程序扩展、调试或升级。
在一些软件架构中,锁用于以相对简单的方式允许或强制线程之间的协作。锁提供对计算资源的独占控制。锁可以用于强制执行有助于防止数据不一致的协调。如果生产者P以及两个消费者C1和C2在没有任何协调的情况下运行,则C1或C2或这两者可能从项队列中获取无效数据,例如,通过从空队列中复制,因为它们没有与P协调以确保P将项放入队列中。C1和C2两者也可能尝试从队列中取出相同的项,因为它们没有彼此协调。但是如果队列上有锁,则P可以锁定C1和C2,同时P将项添加到队列中,并且每个消费者都可以锁定另一消费者,同时拥有锁的消费者从队列中获取项。
虽然锁被广泛使用,但它们可能效率低下;当锁被持有时,只有持有锁的线程才能无限前进。在某些时候,使用锁的其他线程将在不持有锁的情况下完成他们可以做的任何事情,并且将停止取得进展。此外,如果持有锁的线程崩溃、死锁或进入无限循环,则锁不会被释放并且程序将失败。因此,虽然锁可能更容易理解,但线程协调的无锁方法在变得可用时可以提供更高效和更可靠的软件。
发明内容
本文档中描述的一些实施例提供了无锁多线程软件的改进性能。特别地,一些实施例通过在标记的存储器段的压缩期间避免使用锁来提供更高效的垃圾收集。然而,实施例不限于垃圾收集压缩,或者通常甚至不限于垃圾收集。也可以提供或采用其他上下文和其他效率。
一些实施例执行作为统一集(unitary set)的变量值更新的无锁传送。在一些实施例中,存储器包含具有相应未更新值的变量集,该变量集包括变量Var1和至少一个其他变量。与存储器可操作地通信的处理器被配置为,传送作为统一集的变量值更新而没有锁依赖。传送是利用值放置步骤和值取回步骤而被完成的。值放置步骤依次执行以下操作:将变量Var1中的未更新值替换为不同值Z,值Z指示更新正在进行,执行第一释放屏障,将每个其他变量的未更新值替换为相应对应的更新值,执行第二释放屏障,并且将变量Var1中的值Z替换为还是更新值的不同值。值取回步骤依次执行以下操作:从Var1读取到变量DestVar1A中,执行第一获取屏障,从该集中的其他变量读取到相应目的地变量中,执行第二获取屏障,从Var1读取到变量DestVar1B中,以及如果DestVar1A具有值Z或者如果DestVar1A和DestVar1B包含彼此不同的值,则重复上述取回步骤动作。以这种方式,本实施例通过变量将更新值传送到相应目的地变量而没有锁依赖,并且传送作为统一集的更新值。
作为“统一集”的传送是指在值放置和值取回完成之后,目的地变量中的值将不会包括未更新值和更新值两者。即,未更新值和更新值不会在传送被依赖完成之后在变量中混合在一起。
此外,本领域技术人员将理解,此处使用的特定名称“Var1”、“DestVar1A”、“DestVar1B”和“Z”仅仅是为了方便。当执行相同或等效的传送动作时,给定实施例可以使用不同的标识符或其他指定。
与本文中的教导有关的其他技术活动和特征对于本领域技术人员来说也将变得很清楚。给出的示例仅仅是说明性的。本“发明内容”并非旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。相反,提供本“发明内容”是为了以简化的形式介绍一些技术概念,这些技术概念将在下面的“具体实施方式”中进一步描述。创新是通过正确理解的权利要求来定义的,并且在本“发明内容”与权利要求相冲突的情况下,应当以权利要求为准。
附图说明
将参考附图给出更具体的描述。这些附图仅说明了所选择的方面,因此并未完全确定覆盖范围或范围。
图1是一般性地说明计算机系统并且还一般性地说明配置的存储介质的框图;
图2是说明具有增强的更新值传送功能的一些计算机系统的一些方面的框图;
图3是说明在垃圾收集期间在不同时间点处的存储器状态方面的图;
图4是说明垃圾收集线程和增变(mutator)线程的并发执行的图;
图5是说明存储器中对象的方面的图;
图6是说明变量对准的方面的图;
图7是说明数字项的方面的图;
图8是说明一些无锁更新值传送方法中的步骤的流程图;以及
图9是进一步说明一些无锁更新值传送方法中的步骤的流程图。
具体实施方式
概述
创新可以超越其起源,但了解创新的起源可以帮助人们更充分地理解创新。在当前情况下,本文中描述的一些教导是受微软创新者所面临的技术挑战的启发,这些创新者致力于提高垃圾收集性能。特别地,一个技术挑战是如何减少垃圾收集期间的“停止世界(stop-the-world)”时间,这实际上是垃圾收集线程锁定所有托管存储器区域的时间。另一技术挑战是如何在不使用锁时读取与数字项相关联的正确特性值对。
这些和其他挑战由以下场景说明。假定计算系统至少部分通过使用自动垃圾收集来管理针对应用程序线程的存储器。垃圾收集线程不时在系统中自动运行,以标识应用程序先前使用但不再使用的存储器块。在标识之后,这些存储器块会自动放回可用存储器池中,应用程序可以从该存储器池中重新分配和重新使用它们;这可能是之前使用它们的同一应用程序、也可能是另一程序、或这两者。
还假定为了增加可用于重新分配的存储器区域的大小,重新定位仍在使用的存储器段以使它们更连续。即,存储在存储器段X中的数据D被复制到另一存储器段Y中,之后,段X中的存储器可以被重用和覆盖,而不会破坏或丢失数据D。这种复制涉及变量,该变量包含X的地址、Y的地址和D的大小,因为如果一切顺利,从X地址开始的D大小的存储器内容将被复制到从Y地址开始的存储器。
在这种场景下,X的地址和D的长度是成对的值;改变其中一个而不适当改变另一个可能会损坏数据、使线程崩溃或导致其他问题。但是不协调的线程会通过导致配对值中的部分更新来产生不一致。例如,在线程读取X的地址之后但在线程读取现在包含Dnew的变量之前,可能会改变包含D的变量以包含Dnew(不同项的大小)。因此,应当从X复制D量的数据的代码将改为复制Dnew量的数据。类似地,依赖于错误地更新的变量来指示段X中的数据大小(实际上是D而不是Dnew)的其他代码也会因为将Dnew视为数据大小而出错。
更一般地,多线程程序中的两个或更多个变量可以形成集,使得当集中的任何变量被更新时,该集中的所有其他变量也应当被更新以保持一致性(“更新”可以改变变量的值,或者它可以简单地确认变量的值在更新之后将是相同的)。读取变量的线程不应当读取更新值和尚未更新值的混合。出于更新目的,变量应当被视为单元,因此该集可以称为“统一集”。当从上下文中清楚地了解避免部分更新的愿望时,统一集中的变量也可以简单地描述为“相关”。统一变量集不仅可能出现在垃圾收集中,而且还可能出现在各种其他多线程上下文中。
避免不希望的部分更新的一种方式是对正在更新的变量集使用锁定。执行更新的线程从获取锁开始。然后它更新集中的所有变量。最后,它释放锁。读取变量的线程同样获取锁,读取集中的所有变量,然后释放锁。
然而,锁是低效的,因为只有持有锁的线程才能被依赖来取得进展。持有锁的线程也可能无法释放锁,这可能会使处理速度达到蜗牛的速度或完全停止。
幸运的是,也可以使用本文中的教导来实现和执行对相关变量集的无锁更新。在一些实施例中,更新值的统一集的无锁传送是使用以下各项的混合来完成的:(a)不同于所有合法更新值的值Z,(b)释放和获取对代码语句执行强制执行排序的屏障,以及(c)由变量的自然对准产生的原子性。下面进一步描述各种实施例的细节。
操作环境
参考图1,一个实施例的操作环境100包括至少一个计算机系统102。计算机系统102可以是或不是多处理器计算机系统。操作环境可以包括给定计算机系统中的一个或多个机器,该机器可以是集群的、客户端服务器联网的和/或云内的对等联网的。个体机器是计算机系统,协作的机器组也是计算机系统。给定计算机系统102可以被配置用于最终用户,例如,具有应用、用于管理员、作为服务器、作为分布式处理节点和/或以其他方式。
人类用户104可以通过使用显示器、键盘和其他外围设备106经由键入的文本、触摸、语音、移动、计算机视觉、手势和/或其他形式的I/O与计算机系统102交互。屏幕126可以是可移动的外围设备106,或者可以是系统102的组成部分。用户界面可以支持实施例与一个或多个人类用户之间的交互。用户界面可以包括命令行界面、图形用户界面(GUI)、自然用户界面(NUI)、语音命令界面和/或其他用户界面(UI)呈现,它们可以作为不同的选项呈现或者可以是集成的。
系统管理员、网络管理员、云管理员、安全分析师和其他安全人员、操作人员、开发人员、测试人员、工程师、审计员和最终用户每个都是特定类型的用户104。代表一个或多个人行事的自动化代理、脚本、回放软件、设备等也可以是用户104,例如,以促进对系统102的测试。存储设备和/或网络设备在一些实施例中可以被认为是外围设备,并且在其他实施例中可以被认为是系统102的部分,具体取决于它们与处理器110的可拆卸性。例如,图1中未示出的其他计算机系统可以以技术方式与计算机系统102交互或使用经由网络接口设备到网络108的一个或多个连接与另一系统实施例交互。
每个计算机系统102包括至少一个处理器110。与其他合适的系统一样,计算机系统102也包括一个或多个计算机可读存储介质112。存储介质112可以是不同的物理类型。存储介质112可以是易失性存储器、非易失性存储器、原位固定介质、可移动介质、磁性介质、光学介质、固态介质、和/或其他类型的物理耐用存储介质(与仅传播信号或仅能量相反)。特别地,诸如便携式(即,外部)硬盘驱动器、CD、DVD、记忆棒或其他可移动非易失性存储介质等配置的存储介质114在插入或以其他方式安装时可以在功能上成为计算机系统的技术部分,使得其内容可访问以用于与处理器110的交互并且用于由处理器110使用。可移动的配置的存储介质114是计算机可读存储介质112的示例。计算机可读存储介质112的一些其他示例包括内置RAM、ROM、硬盘、和不易被用户移除的其他存储器存储设备104。为了符合当前的美国专利要求,计算机可读介质、计算机可读存储介质和计算机可读存储器在美国任何未决或授予的权利要求下都不是信号本身或仅仅是能量。
存储介质114配置有由处理器110可执行的二进制指令116;例如,“可执行文件”在本文中在广义上使用以包括机器代码、可解释代码、字节码、和/或在虚拟机上运行的代码。存储介质114还配置有数据118,该数据118通过指令116的执行而被创建、修改、引用和/或以其他方式用于技术效果。指令116和数据118配置它们驻留在其中的存储器或其他存储介质114;当该存储器或其他计算机可读存储介质是给定计算机系统的功能部分时,指令116和数据118也配置该计算机系统。在一些实施例中,数据118的部分表示真实世界项,诸如产品特性、库存、物理测量、设置、图像、读数、目标、体积等。这样的数据还通过备份、恢复、提交、中止、重新格式化和/或其他技术操作进行变换。
尽管实施例可以被描述为被实现为由计算设备(例如,通用计算机、服务器或集群)中的一个或多个处理器执行的软件指令,但是这样的描述并不表示穷举所有可能的实施例。本领域技术人员将理解,相同或相似的功能通常也可以全部或部分地直接在硬件逻辑中实现,以提供相同或相似的技术效果。备选地或附加于软件实现,本文中描述的技术功能可以至少部分由一个或多个硬件逻辑组件来执行。例如,并且不排除其他实现,实施例可以包括硬件逻辑组件110、128,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统组件(SOC)、复杂可编程逻辑器件(CPLD)和类似组件。例如,实施例的组件可以基于它们的输入、输出和/或它们的技术效果被分组为交互功能模块。
除了处理器110(例如,CPU、ALU、FPU、TPU和/或GPU)、存储器/存储介质112和显示器126,操作环境还可以包括其他硬件128,诸如电池、总线、电源、有线和无线网络接口卡。名词“屏幕”和“显示器”在本文中可互换使用。显示器126可以包括一个或多个触摸屏、响应于来自笔或平板计算机的输入的屏幕、或仅用于输出的屏幕。在一些实施例中,诸如人类用户I/O设备(屏幕、键盘、鼠标、平板计算机、麦克风、扬声器、运动传感器等)等外围设备106将与一个或多个处理器110和存储器可操作地通信。
在一些实施例中,该系统包括通过有线和/或无线网络108连接的多个计算机。网络接口设备128可以使用诸如分组交换网络接口卡、无线收发器或电话网络接口等网络组件来提供对网络108的访问,例如,该网络组件可以存在于给定计算机系统中。网络接口设备和其他网络组件(诸如,交换机或路由器或防火墙)的虚拟化也可以存在于例如软件定义网络或沙盒或其他安全云计算环境中。在一些实施例中,一个或多个计算机由于与另一联网设备或远程云断开连接或仅间歇性连接而部分或完全“气隙(air gap)”。特别地,本文中教导的无锁更新值传送功能可以在气隙系统上安装和维护。给定实施例还可以通过直接存储器访问、可移动非易失性存储介质、或其他信息存储取回和/或传输方法来传送技术数据和/或技术指令。
本领域技术人员将理解,前述方面和本文中在“操作环境”下呈现的其他方面可以形成给定实施例的部分。本文档的标题并非旨在将特征严格分类为实施例和非实施例特征集。
一个或多个项在图中以虚线轮廓形式示出,或在括号内列出,以强调它们不一定是所示操作环境或所有实施例的部分,但可以与如本文中描述的操作环境或一些实施例中的项互操作。在任何附图或任何实施例中,并非必须要求非虚线轮廓或括号形式的项。特别地,图1是为了方便而提供的;图1中包括项并不表示该项或该项的描述用途在当前创新之前是已知的。
关于系统的更多信息
图2示出了一些系统200的一些方面,这些系统102是用本文中教导的用于无锁更新值传送的至少一些功能202增强的系统102。特别地,所示增强系统200可以包括安装在GC线程206中或在GC标记阶段代码210或其他位置中的垃圾收集器(GC)204。备选地或附加地,功能202可以在增变线程208、应用线程212或其他种类的线程214中实现,诸如在以下一项或多项的组合中:内核120线程、设备驱动程序线程、应用线程、系统服务线程、守护进程、垃圾收集线程、用户界面线程、生产者线程或消费者线程。
所示系统200具有存储器112,存储器112包括相关变量218的至少一个统一集216。存储器112可以包括RAM、磁盘或其他存储器介质,并且具体地,一些实施例使用一个或多个处理器110寄存器238作为保存(多个)变量值220的存储器。每个变量218保存相应值220;不同变量218可以在不同时间保存相同值或保存不同值。变量218包括源变量222和目的地变量224。使用无锁更新值传送功能202,值228通过源变量222被安全高效地传送到相应目的地变量224。即,更新值228被写入源变量222,从源变量222读取,并且写入相应目的地变量224,而不在目的地变量224中混合更新前值226和更新后值228,并且不依赖于锁来防止这种混合。更新前值226在本文中也称为“未更新值”226。
在该增强系统200中,使用更新正在进行指示值230(如名称所指示的)以指示源变量222的更新正在进行中。为方便起见,更新正在进行指示值230在本文中也被称为“Z”。
在这个增强系统200中,释放屏障232和获取屏障234用于对一些线程语句执行强制执行排序。
释放屏障232防止操作重新排序,其中在屏障232之前的程序的源代码列表中所示的存储操作实际上将在释放屏障之前执行。列出顺序有时也称为“程序顺序”。具体地,释放屏障之前的所有存储结果将在屏障232之后的任何存储结果之前可见,并且在屏障232之后的存储将不会在屏障232之前执行。释放屏障232有时称为“存储屏障”232,屏障(232或234)有时被称为“围栏”。作为助记符,释放屏障指示所有值都准备好释放,因为它们在遇到释放屏障之前已经存储。至少从这个意义上说,程序的实际执行顺序将符合程序的列出顺序。
获取屏障234还防止操作重新排序,因为程序列表中所示的所有加载操作(按程序顺序)将在获取屏障之前执行。获取屏障234有时被称为“负载屏障”234。获取屏障指示将在遇到获取屏障之前获取(加载)值。具体地,在屏障234之后的任何负载之前,屏障234之前的所有负载都是全局可见的。
屏障效应可以以各种方式实现。一些环境100支持在源代码中明确指示屏障作为使用诸如“屏障”或“围栏”等标识符的语句。备选地或附加地,可以使用诸如C++memory_order_release或memory_order_acquire的特征等对变量进行操作的特征,例如,使用以下代码:
Varl.store(Z,std::memory_order_release);
VVar2.store(Var2UpdateValue,std::memory_order_release);
Varl.store(Var1UpdateValue,std::memory_order_release);
全存储器屏障236是实现释放屏障所实现的内容和获取屏障所实现的内容两者的屏障。尽管不完全等同于释放屏障加获取屏障,但是关于如本文中教导的更新值传送,全存储器屏障可以被视为能够像释放屏障或获取屏障或这两者一样操作。从这个意义上说,全存储器屏障作为释放屏障或获取屏障“操作”。尽管效率较低,但在一些实现中可以使用全存储器屏障236来代替释放屏障232或获取屏障234或这两者。
图3和图4进一步说明了垃圾收集的一些方面。这些方面中的一些方面是熟悉的,或者出现在熟悉的垃圾收集活动中,但是它们与本文中教导的相关性只有在理解了具有无锁更新值传送的创新垃圾收集标记之后才变得清楚。垃圾收集提供变量集216的示例,但是无锁更新值传送功能202不限于在垃圾收集中使用,并且垃圾收集也可以在没有功能202的情况下实现。
如图3所示,垃圾收集代码在存储器112的段300上操作,这些段由程序执行划分为连续的区域302。给定区域302可以清楚地由一个或多个增变线程使用,如图3中的复选标记符号所示,并且因此禁止回收。给定区域302也可能明显未使用,并且因此是可回收的,如图3中的X标记所示。区域302的可回收性也可能是未确定的。
垃圾收集通常涉及跟踪地址或以其他方式确定存储器区域的使用或未使用状态,并且相应地标记308存储器区域(或表示这些区域的数据结构)。一些垃圾收集器将标记区域留在它们被发现的地方,并且然后程序130被分配在可回收区域之外的存储器。这种方法在所谓的标记清除垃圾收集算法中采用。其他垃圾收集器重定位已使用区域或重定位可回收区域或这两者,以便将具有相同可回收状态的多个区域压缩306在一起。这种被称为标记压缩的方法通常比标记清除方法产生更大的可回收区域304,但由于需要正确地更新地址以匹配压缩结果,因此具有更大的复杂性。正确的地址更新可以使用功能202来实现,使得段地址和段大小仅为统一对而被更新。
图3和图4帮助说明垃圾收集的阶段或子阶段402、以及当存在一些并发时它们与并发的关系。这些图示出了垃圾收集周期中的一些特定阶段,包括标记阶段308、清除阶段404和压缩阶段306。在标记308期间,可到达对象或其他不可回收的存储器区域被标记,无论是就地还是在表示它们的数据结构中。在清除404期间,可回收对象从堆中被清除,例如,通过放置在池中以进行重新分配。在压缩306期间,可回收区域被放置在一起;这也可以被视为将已使用区域(目前不可回收)放置在一起。给定垃圾收集器不必然执行每个阶段,例如,有时压缩306被省略。
垃圾收集的简单方法是暂停除垃圾收集器之外的所有内容,同时垃圾收集器将存储器区域标记308为正在使用或可回收。然而,这种全面的“停止世界”方法在大多数系统中是不可接受的,因为它严重降低了用户程序的性能。因此,垃圾收集器可以被设计为通过允许垃圾收集线程206和任何(多个)增变线程208的并发执行来限制长的“停止世界”子阶段406的目标。标记阶段可以被细分分为并发部分和非并发部分。功能202的使用趋向于增加标记期间的并发性,并且因此趋向于改进经受垃圾收集的用户代码的性能。尽管并发性涉及至少两个线程在至少部分时间重叠执行,但并发性并不要求两个线程总是一起启动或一起挂起或一起停止。
图5和图9示出了指针变量218、928,指针变量218、928在不同时间取两个值。由于这个变量是指针变量,它所取的值220是相应存储器段300的地址,并且在图5中由指向存储器段的虚线箭头指示。在该示例中,每个存储器段的大小不同,如图5中定量地所示。图5并非按比例绘制。任何特定给定段300的地址和大小是成对变量,即它们属于同一统一集216。图5示出了两个段300;每个段都有自己的地址和自己的大小。
图6说明了变量对准。存储器112包含个体可寻址的单元602,诸如字节。在很多系统102中,单个处理器110指令一次可以读取或写入多于一个字节。例如,32位(4字节)数据移动指令在原子指令中读取或写入4字节数据(“原子”表示从线程的角度来看是不可划分的),而64位数据移动指令在单个指令中读取或写入8个字节的数据。然而,在这些示例中,数据I/O部分是原子的,因为它读取或写入在边界604上对准的存储器,边界604是多字节数据大小的倍数。这种对准有时称为“自然”对准。因此,4字节数据变量218在作为4字节的倍数的地址916处自然对准,并且8字节数据变量218在作为8字节的倍数的地址916处自然对准。
在图6中,变量A是4字节变量,并且自然对准,因为它开始和结束的地址是4字节的整数倍。类似地,8字节变量B自然对准,因为它开始和结束的地址是8字节的整数倍。相比之下,4字节变量C不是自然对准的,因为它开始和结束的地址不是4字节的整数倍。
图7示出了具有两个成对特性702的数字项700。例如,在上面讨论的垃圾收集场景中,分配的对象700、704具有地址特性702并且还具有大小特性702。更一般地,数字制品700可以具有两个或更多个特性702,这些特性702被假定为彼此相关,因此适合作为统一集变量进行处理。很多示例都是可能的。例如,在库存数据库记录中,库存小部件的数目和库存小部件的总价值是成对的;如果一个被更新,另一个也应当被更新以保持一致性。此外,在包含城市和邮政编码的数据库记录中,如果其中一个发生改变,则另一个也应当更新,即使“更新”只是确认当前值是正确的。
特别地,一些实施例使用或提供更新值传送功能增强系统,诸如系统200或另一系统102,该系统被配置用于如本文中教导的作为统一集的变量值更新无锁传送。增强系统200包括存储器112和与存储器可操作地通信的处理器110。存储器包含具有相应未更新值的变量集,该变量集包括变量Var1和至少一个其他变量。处理器110被配置为执行用于传送作为统一集的变量值更新而没有锁依赖的步骤,这些步骤包括值放置步骤和值取回步骤。
在该实施例中,值放置步骤包括依次执行以下动作934:将变量Varl中的未更新值替换为不同值Z,该不同值Z指示更新正在进行,执行第一释放屏障,将每个其他变量的未更新值替换为相应对应更新值,执行第二释放屏障,并且将变量Var1中的值Z替换为同样是更新值的不同值。“依次”表示按所示顺序,但也可以执行中间的附加动作。
在该实施例中,值取回步骤包括依次执行以下动作934:从Varl读取到变量DestVarlA中,执行第一获取屏障,从该变量集中的其他变量读取到相应目的地变量中,执行第二获取屏障,从Var1读取到变量DestVar1B中,以及如果DestVar1A具有值Z或者如果DestVar1A和DestVar1B包含彼此不同的值,则重复上述取回步骤操作。
该系统通过变量将更新值传送到相应目的地变量而没有依赖锁。此外,该系统传送作为统一集的更新值,其中在值放置步骤和值取回步骤完成之后,目的地变量中的值将不会包括未更新值和更新值两者。
在一些实施例中,值Z不同于910所有有效的未更新值并且也不同于912所有有效更新值。
在一些实施例中,功能202增强了垃圾收集。例如,在一些实施例中,未更新值226中的一个未更新值表示914空闲空间区域304的地址916,并且对应更新值228表示914分配项700的地址916,并且未更新值226中的另一未更新值表示914空闲空间区域304的大小918并且对应更新值228表示914分配项700的大小918。
在一些实施例中,更新值存储在RAM中,但它们也可以在运行中使用,例如,更新值228可以被读入寄存器238中而不被复制到RAM。因此,在一些实施例中,目的地变量224包括以下至少一项:随机存取存储器112中的位置、或处理器110中的寄存器238。
一些实施例利用比其他实施例更低性能的屏障。在一些情况下,以下条件中的至少一个条件成立:释放屏障232中的至少一个释放屏障被实现为全存储器屏障236的部分,或者获取屏障234中的至少一个获取屏障被实现为全存储器屏障236的部分。但是在一些实施例中,值放置步骤和值取回步骤各自被执行而不依赖于任何全存储器屏障236。全存储器屏障236是作为释放屏障和作为获取屏障两者操作的任何存储器屏障。
在一些实施例中,通过使用自然对准924变量218来提高性能。特别地,在一些实施例中,源变量222和目的地变量224各自在4字节边界上对准。
本文中还描述了其他系统实施例,该系统实施例直接或可导出为所描述的过程或配置的媒体的系统版本,通过本文中对计算硬件的广泛讨论而获悉。
尽管在附图中示出了具体的架构示例,但是实施例可以偏离那些示例。例如,不同图中所示的项可以一起被包括在一个实施例中,图中所示的项可以被省略,不同项中所示的功能可以组合成更少的项或单个项,项可以被重命名,或者项可以以不同的方式彼此连接。
在本公开中提供示例以帮助说明技术的方面,但是在本文档中给出的示例并未描述所有可能的实施例。例如,给定实施例可以包括附加的或不同的技术特征、机制、动作序列、数据结构或特定功能,并且可以以其他方式偏离本文中提供的示例。
过程(又称为方法)
图8示出了可以由诸如系统200等增强系统或如本文中教导的另一功能增强系统来执行或辅助的一系列方法800。图9进一步说明了适合在具有本文中教导的创新功能的系统的操作期间使用的值传递方法(在该词的法律意义上也可以称为“过程”)。图9包括图8所示步骤的一些改进、补充或上下文动作。图9还包含图8所示的步骤。图中所示或以其他方式公开的技术过程将自动执行,例如,通过协作线程214,除非另有说明。过程也可以部分地自动地和部分地手动地执行,直至涉及人类管理员或其他人的动作,例如,在一些实施例中,开发者可以指定要传送的更新值228。本文中所设想的创新过程没有完全是手动的。在给定实施例中,可以重复过程的零个或多个图示步骤,可能使用不同的参数或数据来操作。实施例中的步骤也可以按照与图8和图9中从上到下的顺序不同的顺序进行。步骤可以按顺序、以部分重叠的方式或完全并行执行。特别地,遍历控制流程图800动作项或控制流程图900动作项以指示在过程期间执行的步骤的顺序可以从过程的一个执行到该过程的另一执行而变化。流程图遍历顺序也可以从一个过程实施例到另一过程实施例而变化。步骤也可以被省略、组合、重命名、重新分组、在一个或多个机器上执行、或以其他方式偏离所示流程,只要所执行的过程是可操作的并且符合至少一个权利要求。
一些实施例使用或提供支持作为统一集的变量值更新的无锁传送的方法,值放置步骤802,值放置步骤802依次执行以下动作934:将变量集中的变量Varl中的未更新值替换804为不同值Z,该值Z指示正在进行更新;执行806第一释放屏障;将该集中的其他变量的未更新值804替换为相应更新值;以及执行806第二释放屏障。这些实施例还包括:将变量Var1中的值Z替换804为同样是更新值的不同值。该方法将更新值放置802在源变量222中而没有锁依赖。该方法还将更新值作为统一集合216来放置802,其中在值放置步骤动作完成之后,源变量222中的值将不会包括未更新值226和更新值228两者。
在一些实施例中,该方法还包括值取回步骤808,值取回步骤808依次执行以下动作934:从Varl读取810到变量DestVarlA中;执行812第一获取屏障;从该集中的其他变量读取810到相应目的地变量中;执行812第二获取屏障;从Var1读取810到变量DestVar1B中;以及如果DestVar1A具有值Z或者如果DestVar1A和DestVar1B包含彼此不同的值,则重复814前述取回步骤动作。该方法将更新值从变量中取回808到相应目的地变量中而没有依赖锁,并且传送作为统一集的更新值,其中在值放置步骤和值取回步骤完成之后,目的地变量中的值将不会包括未更新值和更新值两者。
在一些实施例中,值放置步骤802由线程P执行并且值取回步骤808由不同线程R执行。标号“P”和“R”仅是为了方便;一个实施例可以附加地或备选地使用其他标识符来指定线程。
尽管实施例不严格限于涉及垃圾收集的示例,但本文中的教导的方面确实起源于努力改进垃圾收集的性能的上下文。在一些实施例中,未更新值226中的一个未更新值表示空闲空间区域的地址并且对应更新值228表示分配项的地址,并且未更新值226中的另一个未更新值表示空闲空间区域的大小并且对应更新值228表示分配项的大小。每个地址值与对应大小值是统一的,因此保存地址的变量与保存大小的变量在统一集中。
更一般地,设想在很多实施例中,被更新的统一变量中的一个统一变量将是指针,该指针也用于指示是否所有变量都已经被更新。在其中一些实施例中,Var1是指针变量928,并且将指针变量Var1中的未更新值替换804为值Z包括:将Var1归零926(取零)。
尽管教导可以应用于三个或更多个变量218的统一集216,但是可以设想在很多实施例中统一集将由变量对组成。特别地,在一些实施例中,恰好两个变量218正在被更新并且它们彼此密切相关,因为它们都指代相同的数字项700。所涉及的数字项700可以是例如自由空间区域或者对象,并且由统一变量表示的项特性702可以是例如项地址或其他标识符、项长度或其他大小。也就是说,在一些实施例中,变量集216由两个变量组成,该方法在包含数字项700的设备102中执行,并且集216中的变量中的每个变量表示数字项的相应特性702。
一些实施例使用性能较低的全存储器屏障236,而其他实施例不使用。在一些实施例中,执行值放置步骤802而没有将任何释放屏障232实现为全存储器屏障的部分。在其中一些实施例中,并且在一些其他实施例中,执行值取回步骤808而没有将任何获取屏障234实现为全存储器屏障的部分。在某些系统中,释放屏障或获取屏障或这两者可能是隐含的。例如,在某些x/86和x64系统中,没有针对对准的加载或对准的存储显式地插入屏障。除非进行非临时存储,否则可以省略显式插入的释放屏障。
在一些实施例中,所使用930的每个替换动作804个体地是原子的932。在一些实施例中,所使用930的每个读取动作810个体地是原子的932。个体动作804或810或这两者可以是原子的,例如,作为变量在系统200中自然对准924的结果。
配置的存储介质
一些实施例包括配置的计算机可读存储介质112。存储介质112可以包括磁盘(磁、光或其他)、RAM、EEPROMS或其他ROM、和/或其他可配置存储器,尤其包括计算机可读存储介质(不仅仅是传播信号)。所配置的存储介质具体地可以是可移动存储介质114,诸如CD、DVD或闪存。通用存储器(其可以是可移动的或不可移动的,并且可以是易失的或非易失的)可以使用以数据118和指令116的形式从可移动存储介质114和/或另一源(诸如网络连接)读取的项形成配置的存储介质来配置为实施例,诸如统一集216、源变量222、目的地变量224、未更新值226、更新值228、更新正在进行指示值230、释放屏障232、获取屏障234、对准边界604、线程214和传送过程800。如本文中公开的,配置的存储介质112能够引起计算机系统102执行用于统一值传送的技术处理步骤。因此,这些图有助于说明配置的存储介质实施例和过程(也称为方法)实施例、以及系统和过程实施例。特别地,图8或9中说明的或本文中以其他方式教导的任何过程步骤可以用于帮助配置存储介质以形成配置的存储介质实施例。
一些实施例使用或提供了配置有数据118和指令116的计算机可读存储介质112、114,数据118和指令116在由至少一个处理器110执行时使计算系统执行支持作为统一集的变量值更新的无锁传送的方法。该方法包括值取回步骤808,值取回步骤808依次执行以下动作:从变量集中的变量Var1读取810到变量DestVar1A中;执行812第一获取屏障;从集中的其他变量读取810到相应目的地变量中;执行812第二获取屏障;从Var1读取810到变量DestVar1B中;以及如果DestVar1A具有指示更新正在进行的值Z,或者如果DestVar1A和DestVar1B包含彼此不同的值,则重复814上述取回步骤动作。该方法将更新值228从变量222中取回808到相应目的地变量224中而没有依赖锁。该方法将更新值作为统一集216来取回808,其中在值取回步骤动作完成之后,目的地变量中的值将不会包括未更新值和更新值两者。
在一些实施例中,该方法还包括值放置步骤802,值放置步骤802依次执行以下动作:将Varl中的未更新值替换804为值Z,该值Z指示更新正在进行;执行806第一释放屏障;将该变量集中的其他变量的未更新值替换804为相应更新值;执行806第二释放屏障;并且将变量Var1中的值Z替换804为同样是更新值的不同值。该方法将更新值放入802变量中而没有锁依赖。该方法将更新值作为统一集216来放置,其中在值放置步骤动作完成之后,变量中的值将不会同时包括未更新值和更新值两者。
在一些实施例中,指示更新正在进行的值Z 230还表示以下一项:零、非数字或负一。例如,当Var1变量是指针变量928(即,被设计为保存存储器112地址916的变量)时,Z可以为零(NULL)。当Var1变量是数值变量(例如,旨在保存整数值或浮点数表示的变量)时,Z可能不是数字(例如,NaN)。当Var1变量被设计为保存非负值(例如,真实世界或模拟量或为零或更大的测量值)时,Z可能为负值。
在一些实施例中,该方法由垃圾收集软件204执行。在一些实施例中,该方法由多线程应用124软件执行。然而,这些教导也可以应用在其他计算上下文中,例如,在内核120中用于垃圾收集之外的目的。
其他细节、示例和观察
下面提供了对以上讨论的附加支持。为方便起见,这些附加的支持材料出现在不同的标题下。尽管如此,所有这些都旨在被理解为本公开对预期实施例的讨论的整合和组成部分。
一些实施例支持在给定场景中读取正确的值对,而无需全局同步。一些场景涉及从一对值到另一值的转变状态,例如,(MT1,L1)到(MT2,L2)。在这种情况下,“MT”起源于“方法表”的缩写,“L”起源于“长度”的缩写,因为变量涉及表中的方法地址和存储器区域长度(大小)。但是由本文中的公开内容告知的技术人员可以容易地概括其他种类的统一变量集以及具有多于两个变量的统一变量集。
继续特定的垃圾收集示例,假定存在查看对象的GC线程,其中有时包括正在构造的对象704。一些实施例使用间歇性零状态,使得其他线程在如本文中教导的仔细读取和检查的情况下将永远不会观察到(MT1,L2)或(MT2,L1),即使实施例避免使用全局同步。其他方法可能不利地使用全局同步,例如,通过在对象构造期间获取排他锁或挂起另一线程,每个方法都会增加显著的性能开销。相比之下,本文中教导的解决方案是非常轻量级的。
在一些实施例中,对象构造以(MT1,L1)开始,该状态表示将从中构造分配对象的空闲区域。在构造之后,状态变量的值将构造对象表示为(MT2,L2)。
在伪代码方面,构造过程值放置部分可以这样描述:
开始为:(MT1,L1)
转变到状态S1:(0,L1)
释放屏障(以确保前一次写入发生在下一次之前)
转变到状态S2:(0,L2)
释放屏障(以确保前一次写入发生在下一次之前)
结束为:(MT2,L2)。
值消耗发生在读取对象信息以正确计算大小的GC线程上。该代码读取(MT1,L1)或(MT2,L2),但不读取其他两个组合——将未更新值与更新值混合的不一致更新组合:(MT1,L2)、(MT2,L1)。
在伪代码方面,其中MT是在不同时间保存值MT1和MT2的变量,L是在不同时间保存值L1和L2的变量,“<-”表示赋值,“!=”表示不相等,“==”表示相等,“Loop”是跳转标签,构造过程值取回(消费)部分可以这样描述:
Loop:
MT1<-Read(MT)
获取屏障(以确保下一次读取发生在前一次之后)
L<-Read(L)
获取屏障(以确保下一次读取发生在前一次之后)
MT2<-Read(MT)
if(MT1!=MT2)转到Loop
if(MT1==0)转到Loop
由于强制执行的顺序,读取器不会通过读取MT两次来读取带有L2的MT1;第二次读取将看到0或MT2。第二次读取也可以读取MT1,但随后代码也会读取L1并且退出循环。此外,读取器不会读取MT2和L1,因为L1比MT2更早写入,读取器将观察由屏障强制执行的顺序。
技术特性
本文中描述的实施例的技术特征对于本领域普通技术人员来说将是很清楚的,并且对于范围广泛的细心的读者也将以多种方式很清楚。一些实施例解决技术活动,诸如读取810数字系统变量218、写入804数字系统变量218、保持变量218所包含的值220的一致性、对准924存储器112中的变量、以及通过使用存储器屏障232和234对指令116排序,各自都是深深植根于计算技术的活动。所讨论的一些技术机制包括例如释放屏障232、获取屏障234、变量对准924、和专门用于指示230更新仍在进行中的特殊值Z。所讨论的一些技术效果包括例如更新值228的统一传送902、避免904依赖于锁908来进行变量更新传送、以及由于这种锁避免而提高了多线程软件的性能936。因此,纯粹的心理过程显然被排除在外。根据所提供的描述,基于教导的技术特征的其他优点对于技术人员来说也将是很清楚的。
本文中描述的一些实施例可以由一些人在更广泛的背景下看待。例如,诸如一致性、排他性、排序、更新和有效性等概念可以被认为与特定实施例相关。然而,从广泛的背景来看,并不能得出在本文中寻求抽象概念的专有权;它们不是。相反,本公开集中于提供适当的具体实施例,其技术效果完全或部分解决特定技术问题,诸如如何高效地更新变量集,使得当它们被读取时仅读取未更新值或仅读取更新值——从不读取未更新值和更新值的混合。涉及一致性、排他性、排序、更新或有效性的其他配置的存储介质、系统和过程不在本范围内。因此,在正确理解本公开内容的情况下,也避免了模糊、纯粹抽象、缺乏技术特征以及伴随的证明问题。
附加的组合和变化
任何代码、数据结构、逻辑、组件、通信和/或其功能等效物的这些组合也可以与任何上述系统及其变型组合。过程可以包括本文中描述的任何可操作的子集或组合或序列中的任何步骤。每个变型可以单独出现,或与其他变型中的任何一个或多个组合出现。每个变型可以与任何过程一起发生,并且每个过程可以与其他过程中的任何一个或多个组合。每个过程或过程组合(包括变型)可以与上述任何配置的存储介质组合和变型组合。
更一般地,技术人员将认识到,并非本公开的每个部分或其中的任何特定细节都必须满足法律标准,诸如启用、书面描述或最佳模式。此外,实施例不限于本文中描述的特定激励示例、编程语言或库或运行时、软件过程、开发工具、标识符、数据结构、数据组织、符号、控制流、伪代码、命名约定或其他实现选择。与任何其他专利公开的任何明显冲突(即使来自本发明的所有者)在解释本专利公开中提出的权利要求时也没有任何作用。
首字母缩略词、缩写、名称和符号
一些首字母缩略词、缩写、名称和符号定义如下。其他的在本文中其他地方定义,或不需要在本文中定义以便被技术人员理解。
ALU:算术和逻辑单元
API:应用程序接口
BIOS:基本输入/输出系统
CD:光盘
CPU:中央处理单元
DVD:数字多功能盘或数字视频盘
FPGA:现场可编程门阵列
FPU:浮点处理单元
GPU:图形处理单元
GUI:图形用户界面
IaaS或IAAS:基础设施即服务
IoT:物联网
LAN:局域网
OS:操作系统
PaaS或PAAS:平台即服务
RAM:随机存取存储器
ROM:只读存储器
TPU:张量处理单元
UEFI:统一可扩展固件接口
WAN:广域网
一些附加术语
在本文中参考了示例性实施例,诸如在附图中示出的那些,并且在本文中使用特定语言对其进行描述。但是,对于(多个)相关领域的技术人员和拥有本公开内容的技术人员来说,在本文中说明的特征的改变和进一步修改、以及由本文中的特定实施例说明的抽象原理的附加技术应用应当被认为在权利要求的范围内。
在本公开中阐明了术语的含义,因此应当仔细注意这些说明来阅读权利要求。给出了具体示例,但(多个)相关领域的技术人员将理解,其他示例也可能落入所使用的术语的含义内,并且落入一个或多个权利要求的范围内。术语在本文中处的含义不一定与它们在一般用法(特别是在非技术用法)、特定行业的用法或特定词典或词典集中的含义相同。附图标记可以与各种措辞一起使用,以帮助示出术语的广度。从给定文本中省略附图标记并不一定表示文本没有讨论图的内容。发明人主张并且行使对特定和选定词典的权利。引用的术语是明确定义的,但也可以不使用引号隐含地定义术语。术语可以在详细描述中和/或在申请文件的其他地方明确或隐含地定义。
在本文中使用名称“Var1”、“DestVar1A”、“DestVar1B”和“Z”仅仅是为了方便。此外,无意将权利要求的范围限制为具有上述名称的变量或其他计算机实现的数据结构。相反,当权利要求中的括号中包含与上述中的一个类似的名称时,明确的意图是该名称指代在其前面的变量或其他数据结构,类似于短语“下文提及”可以用于准确标识合同中的一方或概念。实际上,权利要求中括号内的名称可以被认为是在它之前的变量或其他数据结构的别名。
为了进一步说明备选指定的可用性,Varl也可以称为例如“更新状态指示变量”,DestVarlA也可以称为例如“第一目的地状态变量”,DestVarlB可以Z也可以称为例如“第二目的地状态变量”,并且Z也可以称为例如“更新正在进行中的值”。
如本文中使用的,“计算机系统”(又称为“计算系统”)可以包括例如一个或多个服务器、主板、处理节点、膝上型计算机、平板计算机、个人计算机(便携式或非便携式)、个人数字助理、智能手机、智能手表、智能手环、手机或移动电话、至少具有处理器和存储器的其他移动设备、视频游戏系统、增强现实系统、全息投影系统、电视、可穿戴计算系统、和/或提供至少部分由指令控制的一个或多个处理器的(多个)其他设备。指令可以是存储器和/或专用电路系统中的固件或其他软件的形式。
“多线程”计算机系统是支持多个执行线程的计算机系统。术语“线程”应当被理解为包括能够或服从于调度并且可能服从于同步的代码。线程也可以在本公开之外通过另一名称来知道,诸如“任务”、“进程”或“协程”。然而,这里在线程与进程之间进行区分,因为线程定义了进程内部的执行路径。此外,进程的线程共享给定地址空间,而不同进程具有不同相应地址空间。进程的线程可以并行、顺序或并行执行和顺序执行的组合运行(例如,时间分片)。
“处理器”是线程处理单元,例如同时多线程实现中的核。处理器包括硬件。给定芯片可以容纳一个或多个处理器。处理器可以是通用的,也可以针对特定用途进行定制,例如矢量处理、图形处理、信号处理、浮点算术处理、加密、I/O处理、机器学习等。
“内核”包括操作系统、管理程序、虚拟机、BIOS或UEFI代码以及类似的硬件接口软件。
“代码”是指处理器指令、数据(包括常量、变量和数据结构)或指令和数据两者。“代码”和“软件”在本文中可互换使用。可执行代码、解释代码和固件是代码的一些示例。
“程序”在本文中广泛使用,包括应用、内核、驱动程序、中断处理程序、固件、状态机、库、和由程序员(也称为开发人员)编写和/或自动生成的其他代码。
“例程”是可调用的代码段,其通常将控制权返回给紧接在程序执行中调用该例程的点之后的指令。根据所使用的术语,有时会在“函数”与“过程”之间进行区分:函数通常返回一个值,而过程不返回。如本文中使用的,“例程”包括功能和过程。例程可以具有返回值的代码(例如,sin(x)),或者它可能只是返回而不提供值(例如,void函数)。
“云”是指用于计算、存储和网络的池化资源,这些资源可弹性地用于测量的按需服务。云可以是私有的、公共的、社区的或混合的,并且云服务可以以基础架构即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)或其他服务的形式提供。除非另有说明,否则任何关于读取文件或写入文件的讨论都包括读取/写入本地文件或通过网络读取/写入,网络可能是云网络或其他网络,或两者都进行(本地和网络读取/写入)。
“IoT”或“物联网”是指可寻址嵌入式计算节点的任何联网集。这样的节点是本文中限定的计算机系统的示例,但它们还具有以下特性中的至少两个:(a)没有本地人类可读的显示;(b)没有本地键盘;(c)输入的主要来源是跟踪非语言数据来源的传感器;(d)没有本地旋转磁盘存储——RAM芯片或ROM芯片提供唯一的本地存储器;(e)没有CD或DVD驱动器;(f)嵌入家用电器或家庭固定装置;(g)嵌入植入式或可穿戴式医疗设备;(h)嵌入车辆;(i)嵌入过程自动化控制系统;或者(j)专注于以下一项的设计:环境监测、市政基础设施监测、工业设备监测、能源使用监测、人类或动物健康监测、物理安全或物理交通系统监测。IoT存储可能成为未授权访问的目标,无论是通过云、通过另一网络还是通过直接本地访问尝试。
对计算资源的“访问”包括读取、修改、写入、执行或以其他方式利用该资源的许可或其他能力的使用。尝试访问可能与实际访问明确区分开来,但没有“尝试”限定词的“访问”包括尝试访问和实际执行或提供的访问两者。
如本文中使用的,除非另有说明,否则“包括”允许附加元素(即,包括表示包含)。
“优化”是指改进,不一定是完善。例如,可以对已经优化的程序或算法进行进一步改进。
“过程”在本文中有时用作计算科学艺术的术语,并且在该技术意义上涵盖计算资源用户,例如,其还可以包括或被称为协程、线程、任务、中断处理程序、应用进程、内核进程、过程或对象方法。实际上,“过程”是由系统实用程序(例如,任务管理器、ps、或其他操作系统环境中的类似实用程序(分别为微软公司和Linus Torvalds的商标))标识的计算实体。“过程”在本文中也用作专利法术语,例如,用于描述与系统权利要求或制品(配置的存储介质)权利要求相对的过程权利要求。类似地,“方法”在本文中有时用作计算科学领域的技术术语(“例程”),也用作专利法领域的术语(“过程”)。专利法意义上的“过程”和“方法”在本文中可互换使用。技术人员将理解在特定实例中意指的含义,并且还将理解给定要求保护的过程或方法(在专利法意义上)有时可以使用一个或多个过程或方法(在计算科学意义上)来实现。
“自动化地”是指通过使用自动化(例如,由软件配置的用于本文中讨论的特定操作和技术效果的通用计算硬件),而不是没有自动化。特别地,“自动化地”执行的步骤不是在纸上或在人的脑海中手动执行的,尽管它们可能由人启动或由人以交互方式引导。使用机器执行自动步骤以获取一个或多个技术效果,如果没有如此提供的技术交互,这些技术效果将无法实现。假定自动执行的步骤包括主动执行的至少一个操作。
技术人员理解技术效果是技术实施例的假定目的。例如,计算涉及一个实施例,并且某些计算也可以在没有技术组件的情况下执行(例如,通过纸和铅笔,甚至作为心理步骤)这一事实并不能消除技术效果的存在或改变实施例的具体和技术性质。诸如替换804值220、读取810值220、执行806、812屏障、使用922对准变量以及本文中讨论的很多其他操作的值传递操作被理解为本质上是数字的。人脑不能直接与CPU或其他处理器或RAM或其他数字存储接口连接,以读取和写入必要的数据以执行本文中教导的统一更新值传送步骤。鉴于本公开内容,本领域技术人员都将很好地理解这一切。
“计算上”同样表示正在使用计算设备(至少处理器加上存储器),并且不包括仅通过人类思想或仅人类行为来获取结果。例如,用纸和铅笔做算术不是如本文所理解的那样在计算上做算术。计算结果更快、更广泛、更深入、更准确、更一致、更全面,和/或以其他方式提供超出人类表现范围的技术效果。“计算步骤”是计算上执行的步骤。“自动”和“计算”都不必然表示“立即”。“计算地”和“自动地”在本文中可互换使用。
“主动”是指没有来自用户的直接请求。实际上,用户甚至可能没有意识到实施例的主动步骤是可能的,直到该步骤的结果已经呈现给用户。除非另有说明,本文中描述的任何计算和/或自动步骤也可以主动完成。
贯穿本文件,使用可选的复数“(多个)”表示存在一个或多个所指示的特征。例如,“(多个)处理器”是指“一个或多个处理器”或等效地是“至少一个处理器”。
出于美国法律和实践的目的,本文、权利要求或其他地方使用的“步骤”一词并非旨在援引手段加功能、步骤加功能或35美国法典第112节第六段/第112(f)节要求解释。特此明确驳斥任何与此有关的推定。
出于美国法律和实践的目的,权利要求无意援引手段加功能解释,除非它们使用短语“用于……的手段”。旨在解释为手段加功能语言的权利要求语言(如果有)将通过使用短语“用于……的手段”来明确表达该意图。当手段加功能解释适用时,无论是通过使用“用于……的手段”和/或通过法院对权利要求语言的法律解释,说明书中对给定名词或给定动词所引用的手段应当理解为与权利要求语言并且通过以下任何一项在本文中联系在一起:在附图的框图中出现在同一块中,用相同或相似的名称表示,用相同的附图标记表示,任何图中描述的功能关系,在本公开的文本中注明的函数关系。例如,如果权利要求限制引用了“zac小部件”,并且该权利要求限制成为手段加功能解释的对象,则至少在说明书中的任何附图块、段落或示例中提及“zac小部件”的任何位置标识的、或通过分配给zac小部件的任何附图标记联系在一起的、或被公开作为与zac小部件的结构或操作具有功能关系的所有结构将被视为zac小部件申请中确定的结构的部分,并且将有助于限定zac小部件结构的等效项集。
本领域技术人员将认识到本发明公开讨论了各种数据值和数据结构,并且认识到这些项驻留在存储器(RAM、磁盘等)中,从而配置存储器。本领域技术人员还将认识到,本发明公开讨论了在给定实现中将体现在可执行代码中的各种算法步骤,并且这种代码也驻留在存储器中,并且它有效地配置了执行它的任何通用处理器,从而将其从通用处理器转换为作为功能专用硬件的专用处理器。
因此,技术人员不会犯将(a)权利要求中记载的存储器和(b)权利要求中记载的数据结构或数据值或代码视为非重叠项的错误。数据结构和数据值和代码被理解为驻留在存储器中,即使权利要求没有明确说明所提到的每个数据结构或数据值或代码段的驻留。因此,不需要明确说明这种驻留。但是,它们也不被禁止,并且可能会出现一两个选定的部分以强调,而不会因此将所有其他数据值和数据结构和代码排除在驻留之外。同样,权利要求中记载的代码功能被理解为配置处理器,而不管该配置量是否在权利要求中明确记载。
在整个文档中,除非另有明确说明,否则对过程中步骤的任何引用都假定该步骤可以由相关方直接执行和/或由该方通过介入机制和/或介入实体间接执行,并且仍然在步骤的范围内。也就是说,除非直接执行是明确规定的要求,否则不需要利益方直接执行该步骤。例如,涉及利益方行动的步骤(诸如关于目的地或其他主题的获取、对准、收集、传送、执行、循环、归零、履行、放置、读取、释放、替换、表示、取回、更新、使用、归零(和获取、获得、对准、已对准等)可以涉及某个其他方的诸如前述或转发、复制、上传、下载、编码、解码、压缩、解压缩、加密、解密、认证、调用等干预动作,包括本文档中列举的任何动作,但仍被理解为由相关方直接执行。
每当提及数据或指令时,应当理解,这些项配置计算机可读存储器和/或计算机可读存储介质,从而将其转换为特定物品,而不是简单地存在于纸上,例如,在一个人的思想中,或者仅仅是在电线上传播的信号。出于美国专利保护的目的,存储器或其他计算机可读存储介质不是传播信号或载波或仅仅是美国专利商标局(USPTO)解释下的可专利主题范围之外的能量In re Nuijten案。没有权利要求涵盖美国的信号本身或仅仅能量,并且鉴于本公开而做出其他主张的任何权利要求解释表面上都是不合理的。除非在美国境外授予的权利要求中另有明确说明,否则权利要求不涵盖信号本身或仅仅能量。
此外,尽管在本文中其他地方有任何明显相反的内容,但应当理解(a)计算机可读存储介质和计算机可读存储器与(b)传输介质(也称为信号介质)之间的明显区分。传输介质是传播信号或载波计算机可读介质。相比之下,计算机可读存储介质和计算机可读存储器不是传播信号或载波计算机可读介质。除非权利要求中另有明确说明,否则“计算机可读介质”是指计算机可读存储介质,而不是传播信号本身,也不仅仅是能量。
本文中的“实施例”是示例。术语“实施例”与“发明”不可互换。实施例可以自由地共享或借用方面来创建其他实施例(假定结果是可操作的),即使所得到的方面的组合在本文本身没有明确描述。对于本领域的技术人员来说,要求明确并且单独地描述每个允许的组合是不必要的,并且将与认识到专利说明书是为本领域技术人员编写的政策相违背。关于由甚至少量可组合特征产生的可能组合的数目的正式组合计算和非正式共同直觉也将表明对于本文中描述的方面存在大量方面组合。因此,要求对每种组合进行明确的陈述将与要求专利说明书简洁和读者了解相关技术领域的政策相违背。
附图标记列表
提供以下列表是为了方便和支持附图并且作为说明书文本的一部分,其通过参考多个项来描述创新。此处未列出的项仍然可以是给定实施例的部分。为了使文本更清晰易读,在文中引用项的一些(但不是全部)引用附近引用了给定参考编号。相同的附图标记可以用于参考给定项的不同示例或不同实例。附图标记列表是:
100:操作环境,也称为计算环境
102:计算机系统,也称为计算的系统或计算系统
104:用户,例如,软件开发者
106:外围设备
108:网络,通常包括例如LAN、WAN、软件定义网络、云和其他有线或无线网络
110:处理器
112:计算机可读存储介质,例如RAM、硬盘
114:可移动的配置的计算机可读存储介质
116:由处理器可执行的指令;可以位于可移动存储介质或其他存储器(易失性或非易失性或这两者)上
118:数据
120:(多个)内核,例如(多个)操作系统、BIOS、UEFI、设备驱动程序
122:工具,例如防病毒软件、防火墙、数据包嗅探器软件、入侵检测系统、入侵预防系统、其他网络安全工具、调试器、分析器、编译器、解释器、反编译器、汇编器、反汇编器、源代码编辑器、自动完成软件、模拟器、模糊器、存储库访问工具、版本控制工具、优化器、协作工具、其他软件开发工具和工具套件(包括例如集成开发环境)、硬件开发工具和工具套件、诊断等。
124:应用,例如文字处理器、网络浏览器、电子表格、游戏、电子邮件工具、命令
126:显示屏,也称为“显示器”
128:计算硬件,不以其他方式与附图标记106、108、110、112、114相关联
130:通常是软件,例如内核、应用、工具、云服务
200:通过更新值传送功能增强的系统,包括一些或所有功能202
202:以本文所述的任何形式更新值传送功能
204:垃圾收集器,也称为“GC”或“垃圾收集器代码”
206:GC线程,即至少主要(超过50%的指令)专用于垃圾收集器代码的线程
208:增变线程,即,至少主要(超过50%的指令)专用于除垃圾收集器代码之外的代码的线程;增变线程通常是用户线程,但也可以是内核线程;术语中的“增变”表示增变线程可以更改(即,改变)在垃圾收集期间使用的地址
210:垃圾收集器标记阶段代码
212:应用线程
214:通常是线程,例如内核线程、设备驱动程序线程、应用线程、系统服务线程、守护进程、垃圾收集线程、用户界面线程、生产者线程、消费者线程或另一执行线程
216:统一变量集
218:通常是变量
220:通常是变量值
222:源变量,在从源到目的地的传送方面
224:目的地变量,在传送方面
226:未更新值,例如,在源变量被更新以保存要传送的更新值之前源变量中的值
228:要传送的更新值
230:更新正在进行值,也称为“Z”;可以是给定程序中不被该程序视为有效的未更新值或有效的更新值的任何值,例如,当变量保存对象地址时,NULL是Z的合适值,因为NULL不是有效的对象地址;附图标记230还用于指定动作,即指示更新正在进行中
232:释放屏障
234:获取屏障
236:全存储器屏障
238:处理器中的寄存器
300:存储器段,例如,至少部分由垃圾收集管理的存储器区域、页面、块或其他区域
302:已分配的存储器的连续区域,或者正在使用或不知道可回收(在图3中由√表示)或已知可回收,因为它已知不再由分配它的程序使用(在图3中用X表示)
304:由压缩产生的可回收存储器的连续区域
306:压缩,例如,一个或多个可回收区域的重新定位以创建更大的连续可回收区域
308:标记;在垃圾收集期间执行的动作,用于将存储器区域标记为(i)正在使用或未知可回收,或(ii)已知可回收
402:垃圾收集的阶段和子阶段
404:垃圾收集的清扫阶段
406:垃圾收集的停止世界子阶段;也称为“STW”
602:个体地存储器的可寻址单元,例如字节
604:4字节边界
700:数字项,例如,记录、对象、数据结构、变量或在存储器112中表示的其他制品
702:数字项的特性,例如位置、大小、年龄、可信度、所有权、访问次数等
704:对象,在面向对象的编程意义上
800:流程图;800还指代由图8的流程图说明或与图8的流程图一致的统一值传送方法
802:放置统一值
804:用值替换值;除非另有说明,否则替换可能是不同的值或相同值的副本(提及Z或值230或不等式均表示替换不同);替换804涉及在替换值之上写入替换值
806:执行释放屏障;该执行不一定涉及执行超出所描述的其他指令的任何附加处理器指令本身,但确实对那些其他指令中的至少一些指令强制执行排序,如本文中讨论的
808:取回统一值
810:读取值
812:执行获取屏障;该执行不必然涉及执行超出所描述的其他指令的任何附加处理器指令本身,但确实对那些其他指令中的至少一些指令强制执行排序,如本文中讨论的
814:重复一个或多个指令,例如通过本文中提供的流程图或伪代码循环所指示的
900:流程图;900还涉及由图9的流程图(包括图8的步骤)说明的或与图9的流程图一致的统一值传送方法
902:将更新值从源变量传送到目的地变量
904:避免依赖于使用锁来执行统一值传送
906:依赖于使用锁来执行统一值传送
908:锁;例如,可以使用互斥体、信号量或临界区来实现
910:不同于有效的未更新值
912:不同于有效的更新值;在很多情况下,有效的未更新值组和有效更新值组将是相同组,但在其他情况下,它们可以不同,例如,更新可以将地址限制在指定范围内或将数量限制为N,N>1
914:以数字形式表示特性702;表示可以是直接的,也可以是间接的,例如,变量可以通过指定地址表中的条目来表示地址,或者作为指向指针的指针,或者作为指向指针的指针的指针(a pointer to a pointer to a pointer),或者作为指向包含所表示的特征等的结构的指针。
916:存储器地址,例如RAM中变量的位置
918:大小,例如,存储器空闲区域或对象中的字节数
922:使用对准的变量
924:例如在N字节边界上对准变量,其中N>1并且N是2的倍数
926:将变量归零,例如用全零位覆盖它;也可以称为“取零”变量
928:指针变量,即被设计为保存存储器地址的变量
930:使用原子动作
932:原子动作
934:通常是动作;在专利方面,动作可以被视为其本身的一个步骤或被视为更大步骤的部分
936:执行或实施软件
938:垃圾收集作为可以执行的动作;通过执行垃圾收集软件执行的活动
940:应用执行;通过执行应用软件而执行的活动
942:在本公开中讨论的尚未分配一些其他附图标记的任何步骤
结论
简而言之,本文中的教导提供了多种计算系统102变量的统一更新功能202,其增强了多线程软件的性能。垃圾收集938是这种高性能无锁多线程软件130的一个示例。对变量218集216的统一无锁更新涉及更新值Z 230、释放屏障232和获取屏障234(它们对代码130执行936强制执行排序)、以及由变量对准924产生的原子性932。传送902是利用值放置步骤802和值取回步骤808来完成的。值放置802将变量Var1 222中的未更新值226替换804为Z 230,执行806释放屏障232,将其他变量222的未更新值226替换804为更新值228,执行806另一释放屏障232,并且将Z 230替换804为Var1 222更新值228。值取回808从Var1 222读取810到DestVar1A 224中,执行812获取屏障234,从其他变量222读取810到相应目的地变量224中,执行812另一获取屏障234,从Var1 222读取810到DestVar1B 224中,以及如果DestVar1A是Z或者如果DestVar1A和DestVar1B不相等,则重复814。作为单元216,这些解决方案200、900各自将更新值228传送902到源变量222中并且从那里传送到目的地变量224而没有锁908。
实施例被理解为它们本身也包括或受益于经过测试和适当的安全控制和隐私控制,诸如通用数据保护条例(GDPR),例如,应当理解,应当采取适当的措施来帮助防止滥用计算系统通过将恶意软件注入或激活到软件中。本文中教导的工具和技术的使用与这样的控件的使用兼容。
尽管在一些激励示例中使用微软技术,但本文中的教导不限于在由微软提供或管理的技术中使用。例如,在适当的许可下,本教导可以体现由其他云服务提供商或其他开发环境提供商或其他运行时提供商提供的软件或服务中。
尽管特定实施例在本文中被明确地图示和描述为过程、配置的存储介质或系统,但是应当理解,对一种类型的实施例的讨论通常也扩展到其他实施例类型。例如,结合图8和图9对过程的描述也有助于描述配置的存储介质,并且有助于描述与其他附图结合讨论的类似的系统和制造商的技术效果和操作。这并不表示来自一个实施例的限制必然会被解读到另一实施例中。特别地,过程不一定限于在讨论系统或制造商(例如,配置的存储器)时呈现的数据结构和布置。
技术人员将理解,实现细节可以与特定代码有关,诸如特定阈值、比较、样本字段、特定种类的运行时或编程语言或架构、特定脚本或其他任务、以及特定计算环境,并且因此不必出现在每个实施例中。技术人员还将理解,在讨论细节时使用的程序标识符和一些其他术语是特定于实现的,并且因此不需要与每个实施例相关。尽管如此,尽管它们不一定需要出现在此处,但这样的细节可以通过提供上下文来帮助一些读者和/或可以说明本文中讨论的技术的很多可能实现中的一些。
在适当注意本文中提供的项的情况下,包括技术过程、技术效果、技术机制和技术细节,它们是说明性的,但不是对所有要求保护的或可要求保护的实施例的全面性,本领域技术人员将理解,本文中描述的本公开和实施例不涉及技术领域之外的主题,也不涉及任何关于其自身的想法,例如主要或原始原因或动机,或纯粹的结果本身,或心理过程或心理步骤,或业务方法或普遍的经济实践,或仅仅组织人类活动的方法,或自然法则本身,或自然发生的事物或过程,或生物或生物的部分,或数学公式本身,或孤立的软件本身,或仅适用于常规计算机,或任何完全难以察觉的事物或任何本身的抽象概念,或无关紧要的解决方案后活动,或完全在未指定的装置上实现的任何方法,或用于无法产生有用和具体结果的任何方法,或抢占所有使用领域,或根据寻求或正在许可或执行这样的保护的司法管辖区的法律不符合专利保护资格的任何其他标的物。
在本文中对具有一些特征X的实施例的引用和在本文其他地方对具有一些特征Y的实施例的引用并不从本公开中排除同时具有特征X和特征Y的实施例,除非这种排除在本文中明确说明。所有可能的否定权利要求限制都在本公开的范围内,在某种意义上,任何被声明为实施例的一部分的特征也可以被明确地从包含在另一实施例中移除,即使本文中在任何示例中都没有给出特定的排除。术语“实施例”在本文中仅用作“过程、系统、制品、配置的计算机可读存储介质、和/或以符合适用法律的方式应用的本文中教导的其他示例的更方便的形式”。因此,给定“实施例”可以包括本文中公开的特征的任何组合,只要该实施例与至少一个权利要求一致。
并非图中所示的每个项都需要出现在每个实施例中。相反,一个实施例可以包含图中未明确示出的(多个)项。尽管这里通过特定示例在文本和附图中说明了一些可能性,但是实施例可以偏离这些示例。例如,示例的特定技术效果或技术特征可以被省略、重命名、以不同方式分组、重复、以不同方式在硬件和/或软件中实例化,或者是出现在两个或更多个示例中的效果或特征的混合。在一些实施例中,在一个位置显示的功能也可以在不同的位置提供;技术人员认识到,功能模块可以在给定实现中以各种方式限定,而不必从作为一个整体查看的交互模块的集中省略所需要的技术效果。由于空间限制或为了方便,不同的步骤可以在图中的单个框中一起显示,但仍然是可单独执行的,例如,在方法的给定执行中可以在没有另一步骤的情况下执行一个步骤。
自始至终通过附图标记对附图进行了参考。在与给定附图标记相关的措辞中、在附图中或在文本中的任何明显不一致都应当被理解为只是扩大了该附图标记所指内容的范围。给定附图标记的不同实例可以指代不同的实施例,即使使用相同的附图标记。类似地,给定附图标记可以用来指代动词、名词和/或每个的对应实例,例如,处理器110可以通过执行它们来处理110指令。
如本文中使用的,诸如“一个”、“一”和“该”等术语包括所指示的项或步骤中的一个或多个。特别地,在权利要求中,对项的引用通常表示存在至少一个这样的项,并且对步骤的引用表示执行该步骤的至少一个实例。类似地,在上下文允许的情况下,“是(is)”和其他单数动词形式应当理解为包含“都是(are)”和其他复数形式的可能性,以避免语法错误或误解。
标题仅为方便起见;有关给定主题的信息可以在标题指示该主题的部分之外找到。
如提交的所有权利要求和摘要都是说明书的部分。
在本文中使用的任何术语暗示或以其他方式指代行业标准的范围内,并且在适用法律要求标识诸如标准的特定版本的范围内,本公开应当理解为指的是根据适用专利法截至本公开的最早优先权日的至少以草稿形式(最终形式优先,如果较新)发布的该标准的最新版本。
尽管示例性实施例已经在附图中示出并且在上面进行了描述,但是对于本领域普通技术人员来说很清楚的是,在不背离权利要求中阐述的原理和概念的情况下可以做出很多修改,并且这样的修改不必包含整个抽象概念。尽管以特定于结构特征和/或程序动作的语言描述了主题,但应当理解,在所附权利要求中定义的主题不必然限于权利要求书上面描述的特定技术特征或动作。没有必要在给定定义或示例中标识的每个手段或方面或技术效果在每个实施例中都存在或被利用。相反,所描述的特定特征和作用以及效果作为示例被公开以供在实现权利要求时考虑。
未涵盖整个抽象概念但落入权利要求的等效含义和范围内的所有变化将在法律允许的最大范围内包含在它们的范围内。
Claims (15)
1.一种系统,被配置用于作为统一集的变量值更新的无锁传送,所述系统包括:
存储器,包含具有相应未更新值的变量集,所述变量集包括更新状态指示变量(Var1)和至少一个其他变量;
处理器,与所述存储器可操作地通信,所述处理器被配置为执行用于传送作为统一集的变量值更新而没有锁依赖的步骤,所述步骤包括值放置步骤和值取回步骤;
其中所述值放置步骤包括依次执行以下动作:将所述更新状态指示变量(Var1)中的未更新值替换为不同值(Z),所述值(Z)指示更新正在进行,执行第一释放屏障,将每个其他变量的所述未更新值替换为相应的对应更新值,执行第二释放屏障,并且将所述更新状态指示变量(Var1)中的所述值(Z)替换为也是更新值的不同值;
其中所述值取回步骤包括依次执行以下动作:从所述更新状态指示变量(Var1)读取到第一目的地状态变量(DestVar1A)中,执行第一获取屏障,从所述变量集中的其他变量读取到相应目的地变量中,执行第二获取屏障,从所述更新状态指示变量(Var1)读取到第二目的地状态变量(DestVar1B)中,以及如果所述第一目的地状态变量(DestVar1A)具有所述值(Z)或者如果所述第一目的地状态变量(DestVar1A)和所述第二目的地状态变量(DestVar1B)包含彼此不同的值,则重复所述取回步骤动作;
从而所述系统通过所述变量将所述更新值传送到相应目的地变量而没有锁依赖,并且所述系统传送作为统一集的所述更新值,其中在所述值放置步骤和所述值取回步骤被完成之后,所述目的地变量中的所述值将不会包括未更新值和更新值两者。
2.根据权利要求1所述的系统,其中所述值(Z)不同于所有有效的未更新值并且也不同于所有有效的更新值。
3.根据权利要求1所述的系统,其中所述未更新值中的一个未更新值表示空闲空间区域的地址,并且对应的所述更新值表示分配项的地址,以及其中所述未更新值中的另一未更新值表示所述空闲空间区域的大小并且对应的所述更新值表示所述分配项的大小。
4.根据权利要求1所述的系统,其中所述目的地变量包括以下至少一项:随机存取存储器中的位置、或者处理器中的寄存器。
5.根据权利要求1所述的系统,其中以下至少一项成立:所述释放屏障中的至少一个释放屏障被实现为全存储器屏障的部分,或者所述获取屏障中的至少一个获取屏障被实现为全存储器屏障的部分。
6.根据权利要求1所述的系统,其中所述值放置步骤和所述值取回步骤各自被执行而不依赖于任何全存储器屏障,全存储器屏障是既作为释放屏障又作为获取屏障来操作的存储器屏障。
7.根据权利要求1所述的系统,其中所述变量各自被自然对准。
8.一种支持作为统一集的变量值更新的无锁传送的方法,所述方法包括值放置步骤,所述值放置步骤依次执行以下动作:
将变量集中的更新状态指示变量(Var1)中的未更新值替换为不同值(Z),所述值Z指示更新正在进行;
执行第一释放屏障;
将所述变量集中的其他变量的未更新值替换为相应更新值;
执行第二释放屏障;以及
将所述更新状态指示变量(Var1)中的所述值(Z)替换为也是更新值的不同值;
从而所述方法将更新值放置在所述变量中而没有锁依赖,并且所述方法将所述更新值作为统一集来放置,其中在所述值放置步骤动作被完成之后,所述变量中的所述值将不会包括未更新值和更新值两者。
9.根据权利要求8所述的方法,还包括值取回步骤,所述值取回步骤依次执行以下动作:
从所述更新状态指示变量(Var1)读取到第一目的地状态变量(DestVar1A)中;
执行第一获取屏障;
从所述变量集中的其他变量读取到相应目的地变量中;
执行第二获取屏障;
从所述更新状态指示变量(Var1)读取到第二目的地状态变量(DestVar1B)中;以及
如果所述第一目的地状态变量(DestVar1A)具有所述值(Z)或者如果所述第一目的地状态变量(DestVar1A)和所述第二目的地状态变量(DestVar1B)包含彼此不同的值,则重复所述取回步骤动作;
从而所述方法将所述更新值从所述变量中取回到相应目的地变量中而没有锁依赖,并且所述方法将传送作为统一集的所述更新值,其中在所述值放置步骤和所述值取回步骤被完成之后,所述目的地变量中的所述值将不会包括未更新值和更新值两者。
10.根据权利要求9所述的方法,其中所述值放置步骤由线程(P)执行并且所述值取回步骤由不同线程(R)执行。
11.根据权利要求9所述的方法,其中所述未更新值中的一个未更新值表示空闲空间区域的地址,并且对应的所述更新值表示分配项的地址,以及其中所述未更新值中的另一未更新值表示所述空闲空间区域的大小并且对应的所述更新值表示所述分配项的大小。
12.根据权利要求8所述的方法,其中将所述更新状态指示变量(Var1)中的所述未更新值替换为所述值(Z)包括:将所述更新状态指示变量(Var1)归零。
13.根据权利要求8所述的方法,其中所述变量集包括两个变量,其中所述方法在包含数字项的设备中执行,并且其中所述变量集中的每个变量表示所述数字项的相应特性。
14.根据权利要求8所述的方法,其中所述值放置步骤被执行而没有将所述释放屏障中的任何释放屏障实现为全存储器屏障的部分。
15.根据权利要求8所述的方法,其中每个替换动作分别是原子的。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/735,418 US11392427B2 (en) | 2020-01-06 | 2020-01-06 | Lock-free reading of unitary value sets |
US16/735,418 | 2020-01-06 | ||
PCT/US2020/060813 WO2021141673A1 (en) | 2020-01-06 | 2020-11-17 | Lock-free reading of unitary value sets |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114930297A true CN114930297A (zh) | 2022-08-19 |
Family
ID=73793820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080092112.8A Pending CN114930297A (zh) | 2020-01-06 | 2020-11-17 | 单位值集的无锁读取 |
Country Status (11)
Country | Link |
---|---|
US (1) | US11392427B2 (zh) |
EP (1) | EP4088187A1 (zh) |
JP (1) | JP2023509306A (zh) |
KR (1) | KR20220119400A (zh) |
CN (1) | CN114930297A (zh) |
AU (1) | AU2020421583A1 (zh) |
BR (1) | BR112022011124A2 (zh) |
CA (1) | CA3166321A1 (zh) |
IL (1) | IL294304A (zh) |
MX (1) | MX2022008352A (zh) |
WO (1) | WO2021141673A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10802965B2 (en) | 2019-02-05 | 2020-10-13 | Microsoft Technology Licensing, Llc | Reducing synchronization reliance in garbage collection marking |
US11422932B2 (en) | 2019-12-20 | 2022-08-23 | Microsoft Technology Licensing, Llc | Integrated reference and secondary marking |
US12020064B2 (en) * | 2020-10-20 | 2024-06-25 | Micron Technology, Inc. | Rescheduling a failed memory request in a processor |
US11797344B2 (en) * | 2020-10-30 | 2023-10-24 | Red Hat, Inc. | Quiescent state-based reclaiming strategy for progressive chunked queue |
US11954023B2 (en) | 2022-07-20 | 2024-04-09 | Microsoft Technology Licensing, Llc | Garbage collection prefetching state machine |
Family Cites Families (67)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6047295A (en) | 1998-05-05 | 2000-04-04 | International Business Machines Corporation | Computer system, program product and method of managing weak references with a concurrent mark sweep collector |
JP4662657B2 (ja) | 2000-07-10 | 2011-03-30 | マイクロソフト コーポレーション | 統一データ型システムおよび方法 |
US6502111B1 (en) | 2000-07-31 | 2002-12-31 | Microsoft Corporation | Method and system for concurrent garbage collection |
US6865585B1 (en) | 2000-07-31 | 2005-03-08 | Microsoft Corporation | Method and system for multiprocessor garbage collection |
US6598141B1 (en) | 2001-03-08 | 2003-07-22 | Microsoft Corporation | Manipulating interior pointers on a stack during garbage collection |
US7203756B2 (en) | 2001-04-27 | 2007-04-10 | International Business Machines Corporation | Mechanism to cache references to Java RMI remote objects implementing the unreferenced interface |
US6980997B1 (en) | 2001-06-28 | 2005-12-27 | Microsoft Corporation | System and method providing inlined stub |
US7254597B2 (en) * | 2002-01-11 | 2007-08-07 | Sun Microsystems, Inc. | Lock-free implementation of dynamic-sized shared data structure |
US9141539B2 (en) | 2002-05-24 | 2015-09-22 | Oracle International Corporation | System and method for object deletion in persistent memory using bitmap windows |
US6973554B2 (en) | 2003-04-23 | 2005-12-06 | Microsoft Corporation | Systems and methods for multiprocessor scalable write barrier |
US7529775B2 (en) | 2003-08-20 | 2009-05-05 | Microsoft Corporation | Method and system for collecting information about applications on a computer system |
US8578380B1 (en) * | 2003-12-17 | 2013-11-05 | Vmware, Inc. | Program concurrency control using condition variables |
US8131955B2 (en) | 2004-04-15 | 2012-03-06 | Microsoft Corporation | Ephemeral garbage collection using a tracking mechanism on a card table to determine marked bundles |
US7665077B2 (en) | 2004-10-18 | 2010-02-16 | Microsoft Corporation | System and method for sharing objects between applications in a virtual runtime environment |
US7822938B2 (en) | 2004-10-20 | 2010-10-26 | Microsoft Corporation | System and method for performing garbage collection based on unmanaged memory allocations |
US7610579B2 (en) | 2004-12-10 | 2009-10-27 | Microsoft Corporation | Critical finalizers |
US7937709B2 (en) | 2004-12-29 | 2011-05-03 | Intel Corporation | Synchronizing multiple threads efficiently |
US7577657B2 (en) | 2005-03-18 | 2009-08-18 | Microsoft Corporation | System and method for updating objects in a multi-threaded computing environment |
US8713524B2 (en) | 2005-04-06 | 2014-04-29 | Microsoft Corporation | Memory management configuration |
US7389395B1 (en) | 2005-06-26 | 2008-06-17 | Sun Microsystems, Inc. | Split-reference, two-pass mark-compaction |
US7441094B2 (en) | 2005-07-05 | 2008-10-21 | Microsoft Corporation | Memory management configuration |
US8701095B2 (en) | 2005-07-25 | 2014-04-15 | Microsoft Corporation | Add/remove memory pressure per object |
US8234378B2 (en) | 2005-10-20 | 2012-07-31 | Microsoft Corporation | Load balancing in a managed execution environment |
US7926071B2 (en) | 2005-10-20 | 2011-04-12 | Microsoft Corporation | Load balancing interfaces |
US20070100919A1 (en) | 2005-11-01 | 2007-05-03 | Electronics And Telecommunications Research Institute | Garbage collection unit and method thereof |
US20070156967A1 (en) | 2005-12-29 | 2007-07-05 | Michael Bond | Identifying delinquent object chains in a managed run time environment |
US7774389B2 (en) | 2007-01-17 | 2010-08-10 | Microsoft Corporation | Optimized garbage collection techniques |
US7685182B2 (en) | 2007-05-08 | 2010-03-23 | Microsoft Corporation | Interleaved garbage collections |
US7716192B2 (en) | 2007-05-08 | 2010-05-11 | Microsoft Corporation | Concurrent, lock-free object copying |
US9208081B1 (en) | 2007-11-30 | 2015-12-08 | Oracle America, Inc. | Concurrent object management |
US8065491B2 (en) * | 2007-12-30 | 2011-11-22 | Intel Corporation | Efficient non-transactional write barriers for strong atomicity |
US7801872B2 (en) | 2008-04-08 | 2010-09-21 | Microsoft Corporation | Providing a publishing mechanism for managed objects |
US7831640B2 (en) | 2008-04-15 | 2010-11-09 | Microsoft Corporation | Using an overflow list to process mark overflow |
US7987215B2 (en) | 2008-04-22 | 2011-07-26 | Microsoft Corporation | Efficiently marking objects with large reference sets |
US7953778B2 (en) * | 2008-05-20 | 2011-05-31 | International Business Machines Corporation | Efficient support of consistent cyclic search with read-copy update and parallel updates |
US7860906B2 (en) | 2008-05-28 | 2010-12-28 | Microsoft Corporation | Overflow per segment |
US8028008B2 (en) | 2008-09-25 | 2011-09-27 | International Business Machines Corporation | System and method for optimizing write barrier in garbage collection |
US8612493B2 (en) | 2008-10-30 | 2013-12-17 | International Business Machines Corporation | Allocation cache premarking for snap-shot-at-the-beginning concurrent mark-and-sweep collector |
US8825719B2 (en) | 2008-10-30 | 2014-09-02 | Microsoft Corporation | Incremental lock-free stack scanning for garbage collection |
US20100318584A1 (en) | 2009-06-13 | 2010-12-16 | Microsoft Corporation | Distributed Cache Availability During Garbage Collection |
US8924984B2 (en) * | 2009-06-26 | 2014-12-30 | Microsoft Corporation | Lock-free barrier with dynamic updating of participant count |
US8782306B2 (en) | 2010-02-03 | 2014-07-15 | Oracle America | Low-contention update buffer queuing for large systems |
US8850166B2 (en) * | 2010-02-18 | 2014-09-30 | International Business Machines Corporation | Load pair disjoint facility and instruction therefore |
US8527559B2 (en) | 2010-04-23 | 2013-09-03 | Clausal Computing Oy | Garbage collector with concurrent flipping without read barrier and without verifying copying |
US8566368B2 (en) | 2010-09-29 | 2013-10-22 | Microsoft Corporation | Garbage collection extensibility via managed code |
US10754770B2 (en) | 2011-10-10 | 2020-08-25 | Microsoft Technology Licensing, Llc | Work stealing of partially-marked objects |
US20150227414A1 (en) * | 2012-08-31 | 2015-08-13 | Pradeep Varma | Systems And Methods Of Memory And Access Management |
US9489406B1 (en) | 2013-03-15 | 2016-11-08 | Google Inc. | Linear time processing of weak properties in a garbage collected environment |
US9519668B2 (en) | 2013-05-06 | 2016-12-13 | International Business Machines Corporation | Lock-free creation of hash tables in parallel |
US9804962B2 (en) | 2015-02-13 | 2017-10-31 | Microsoft Technology Licensing, Llc | Garbage collection control in managed code |
US10558566B2 (en) | 2015-04-16 | 2020-02-11 | Microsoft Technology Licensing, Llc | Garbage collection of non-pinned objects within heap |
US10929201B2 (en) | 2015-10-22 | 2021-02-23 | Wind River Systems, Inc. | Method and system for implementing generation locks |
US10013347B2 (en) | 2015-10-27 | 2018-07-03 | Sybase, Inc. | Non-blocking parallel memory mechanisms |
US9921959B2 (en) | 2016-03-11 | 2018-03-20 | Oracle International Corporation | Efficient reference classification and quick memory reuse in a system that supports concurrent garbage collection |
US9846645B1 (en) | 2016-05-27 | 2017-12-19 | Hewlett Packard Enterprise Development Lp | Managing objects stored in memory |
US10120655B2 (en) | 2016-06-03 | 2018-11-06 | Microsoft Technology Licensing, Llc. | Seamless high performance interoperability between different type graphs that share a garbage collector |
US10761979B2 (en) | 2016-07-01 | 2020-09-01 | Intel Corporation | Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value |
US10248471B2 (en) * | 2016-09-15 | 2019-04-02 | Oracle International Corporation | Lockless execution in read-mostly workloads for efficient concurrent process execution on shared resources |
US10572181B2 (en) | 2017-02-01 | 2020-02-25 | Microsoft Technology Licensing, Llc | Multiple stage garbage collector |
US10628306B2 (en) | 2017-02-01 | 2020-04-21 | Microsoft Technology Licensing, Llc | Garbage collector |
US10459771B2 (en) | 2017-02-22 | 2019-10-29 | Red Hat Israel, Ltd. | Lightweight thread synchronization using shared memory state |
US10360079B2 (en) * | 2017-06-16 | 2019-07-23 | GM Global Technology Operations LLC | Architecture and services supporting reconfigurable synchronization in a multiprocessing system |
US10558564B2 (en) | 2017-09-28 | 2020-02-11 | Hewlett Packard Enterprise Development Lp | Pointers in a memory managed system |
WO2020005597A1 (en) | 2018-06-28 | 2020-01-02 | Microsoft Technology Licensing, Llc | Managing global and local execution phases |
US11301602B2 (en) * | 2018-11-13 | 2022-04-12 | Gauntlet Networks, Inc. | Simulation-based testing of blockchain and other distributed ledger systems |
US10802965B2 (en) | 2019-02-05 | 2020-10-13 | Microsoft Technology Licensing, Llc | Reducing synchronization reliance in garbage collection marking |
US11422932B2 (en) | 2019-12-20 | 2022-08-23 | Microsoft Technology Licensing, Llc | Integrated reference and secondary marking |
-
2020
- 2020-01-06 US US16/735,418 patent/US11392427B2/en active Active
- 2020-11-17 CA CA3166321A patent/CA3166321A1/en active Pending
- 2020-11-17 CN CN202080092112.8A patent/CN114930297A/zh active Pending
- 2020-11-17 EP EP20824009.3A patent/EP4088187A1/en active Pending
- 2020-11-17 WO PCT/US2020/060813 patent/WO2021141673A1/en active Application Filing
- 2020-11-17 AU AU2020421583A patent/AU2020421583A1/en active Pending
- 2020-11-17 KR KR1020227023213A patent/KR20220119400A/ko unknown
- 2020-11-17 MX MX2022008352A patent/MX2022008352A/es unknown
- 2020-11-17 JP JP2022534155A patent/JP2023509306A/ja active Pending
- 2020-11-17 BR BR112022011124A patent/BR112022011124A2/pt unknown
- 2020-11-17 IL IL294304A patent/IL294304A/en unknown
Also Published As
Publication number | Publication date |
---|---|
IL294304A (en) | 2022-08-01 |
US20210208954A1 (en) | 2021-07-08 |
EP4088187A1 (en) | 2022-11-16 |
US11392427B2 (en) | 2022-07-19 |
JP2023509306A (ja) | 2023-03-08 |
AU2020421583A1 (en) | 2022-08-25 |
WO2021141673A1 (en) | 2021-07-15 |
BR112022011124A2 (pt) | 2022-08-23 |
CA3166321A1 (en) | 2021-07-15 |
KR20220119400A (ko) | 2022-08-29 |
MX2022008352A (es) | 2022-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11301375B2 (en) | Reducing synchronization reliance in marking | |
US8732674B1 (en) | Revertable managed execution image instrumentation | |
US11392427B2 (en) | Lock-free reading of unitary value sets | |
US10824420B2 (en) | Caching build graphs | |
Pinto et al. | A large-scale study on the usage of Java’s concurrent programming constructs | |
EP3123316B1 (en) | Supporting dynamic behavior in statically compiled programs | |
CN114830099A (zh) | 集成引用和次对象的标记 | |
US8595175B2 (en) | Fluent API patterns for managing object persistence | |
Ma et al. | DVM: A big virtual machine for cloud computing | |
Li | Advanced design and implementation of virtual machines | |
US11972237B1 (en) | Member invocation declarative interception | |
RU2805768C2 (ru) | Уменьшение зависимости от синхронизации в пометке сбора мусора | |
US20240160442A1 (en) | Working context transfer across development environments | |
García Ortega | SimpleOpenCL: desenvolupament i documentació d'una llibreria que facilita la programació paral· lela en OpenCL | |
Petersen et al. | UNIVERSE | |
Vennaro | iOS Development at Scale |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40079618 Country of ref document: HK |