无锁参考计数制造技术

技术编号:22334407 阅读:49 留言:0更新日期:2019-10-19 13:05
本发明专利技术涉及用于参考计数的技术。与对象对应的父线程计数器由父线程创建,其中所述父线程计数器包括分层计数器数据结构。创建子线程的子线程计数器,包括分层计数器数据结构,并将对所述对象的所述引用从所述父线程传递到所述子线程。更新所述父线程计数器中的所述分层计数器数据结构以引用所述子线程计数器,并更新所述子线程计数器中的所述分层计数器数据结构以指向所述父线程计数器。然后,当所述子线程完成处理时通知所述父线程计数器。作为所述更新的一部分,所述父线程和子线程计数器采用无锁机制。

【技术实现步骤摘要】
【国外来华专利技术】无锁参考计数相关申请案交叉申请本专利技术要求于2017年3月10日递交的专利技术名称为“无锁参考计数”的第15/456,140号美国非临时专利申请案的在先申请优先权,该在先申请的内容以引入的方式并入本文。
本专利技术涉及使用参考计数器进行存储器管理的技术。
技术介绍
存储器管理系统通常跟踪创建后的存储器对象,并删除不再需要的那些对象,以使所使用的存储器再次变为可用。这种系统也称为垃圾收集器,其通常的工作是维护与每个存储器对象关联的引用计数。例如,引用计数用于跟踪存储器中正在创建或分配的对象,随后删除这些对象。当线程(或进程或其它实体)访问或以其它方式引用该存储器对象时,引用计数会增加。当所述线程对所述存储器对象删除引用时,所述引用计数会减少。当所述引用计数达到零时,假设所述存储器对象不再使用,所述存储器管理器可以释放所述存储器以进行重复使用,从而降低存储器耗尽的可能性。此外,计算系统通常有多个处理器,通过在这些处理器上分配给定的工作负载可以提高计算吞吐量。每个处理器可以具有关联存储器,其运行速度高于主存储器。当多个线程在不同的处理器上执行并访问或共享通用存储器对象时,通常需要将该对象的引用计数从一个存储器传输到另一个存储器,这可能会导致延迟增加和处理效率降低。随着计算系统的规模不断扩大,并行执行的线程数量大幅增加,所述存储器管理可能会导致发布的参考计数指令数量增加,同时系统整体性能也会下降。
技术实现思路
在第一实施例中,提供一种计算机实现的参考计数方法,包括:创建与父线程引用的对象对应的父线程计数器,所述父线程计数器包括分层计数器数据结构;创建子线程的子线程计数器,所述子线程计数器包括所述分层计数器数据结构,并将对所述对象的所述引用从所述父线程传递到所述子线程;更新所述父线程计数器中的所述分层计数器数据结构以引用所述子线程计数器,并更新所述子线程计数器中的所述分层计数器数据结构以指向所述父线程计数器;当所述子线程完成处理时通知所述父线程计数器。在根据前述任一实施例的第二实施例中,创建所述父线程计数器包括:创建所述父线程计数器包括初始化所述分层计数器数据结构,以将父计数值设置为初始值1,将所述父线程的状态设置为活动,将子项列表设置为空,并将指针设置为空;创建所述子线程计数器包括初始化所述分层计数器数据结构,以将子计数值设置为初始值1,将所述父线程的状态设置为活动,将子项列表设置为空,并将指针设置为指向所述父线程计数器。在根据前述任一实施例的第三实施例中,更新所述分层计数器数据结构包括:当所述父线程添加对所述对象的引用时,增加所述父线程计数器的所述父计数值;当父线程删除对所述对象的所述引用时,减少所述父线程计数器的所述父计数值;当所述子线程添加对所述对象的引用时,增加所述子引用计数器的所述子计数值;当所述子线程删除对所述对象的所述引用时,减少所述子引用计数器的所述子计数值。在根据前述任一实施例的第四实施例中,所述计算机实现的方法还包括:完成处理后,将所述父线程和所述子线程的所述状态从活动改变为非活动;独立修改所述父线程和所述子线程中的子项列表,以添加或删除子计数器;将用于新添加子项的所述指针设置为指向直接父计数器。在根据前述任一实施例的第五实施例中,删除对所述对象的所述引用包括:根据所述子线程计数值确定所述子线程计数器是否已完成处理;检查所述子线程计数器是否有所述子项列表;为响应所述子线程计数器的所述子计数值为零、所述子线程计数器的所述子线程列表为空或所述子项列表中列出的所述子线程全部为非活动以及所述子线程的所述状态为非活动,删除对所述对象的所述引用。在根据前述任一实施例的第六实施例中,所述计算机实现的方法还包括:根据所述父计数值确定所述父线程计数器是否已完成处理;检查所述父线程中的所述指针;释放所述存储器中的所述对象,以响应所述指针为空和所述父线程的所述状态为非活动。在根据前述任一实施例的第七实施例中,所述分层计数器数据结构包括计算对所述对象的所述引用数量的计数值,指示所述对象的状态为活动或非活动的变量、子计数器列表以及指向父计数器的指针。在根据前述任一实施例的第八实施例中,指示对所述对象的所述引用数量的所述计数值由所述父线程和所述子线程中的一个独立修改;所述状态从活动状态改变为非活动状态;所述子计数器列表为所述线程中对应的一个线程标识各个子计数器;在初始创建所述线程计数器中的一个时设置所述指针。在根据上述任一实施例的第九实施例中,所述父线程计数器和所述子线程计数器采用无锁参考计数。在第十实施例中,提供一种用于参考计数的设备,包括:非瞬时性存储器,包括指令;一个或多个处理器,与所述存储器通信,其中所述一个或多个处理器执行所述指令完成以下操作,包括:创建与父线程引用的对象对应的父线程计数器,所述父线程计数器包括分层计数器数据结构;创建子线程的子线程计数器,所述子线程计数器包括所述分层计数器数据结构,并将对所述对象的所述引用从所述父线程传递到所述子线程;无锁定更新所述父线程计数器中的所述分层计数器数据结构以引用所述子线程计数器,并更新所述子线程计数器中的所述分层计数器数据结构以指向所述父线程计数器;当所述子线程完成处理时通知所述父线程计数器。在第十一实施例中,提供一种非瞬时性计算机可读介质,存储用于参考计数的计算机指令,当一个或多个处理器执行所述计算机指令时,执行以下步骤:创建与父线程引用的对象对应的父线程计数器,所述父线程计数器包括分层计数器数据结构;创建子线程的子线程计数器,所述子线程计数器包括所述分层计数器数据结构,并将对所述对象的所述引用从所述父线程传递到所述子线程;更新所述父线程计数器中的所述分层计数器数据结构以引用所述子线程计数器,并更新所述子线程计数器中的所述分层计数器数据结构以指向所述父线程计数器;当所述子线程完成处理时通知所述父线程计数器。提供本
技术实现思路
是为了以简化的形式引入概念的选择,这些概念将在以下具体实施方式中进行进一步的描述。本
技术实现思路
的目的不在于识别权利要求书保护的主题的关键特征或必要特征,也不在于帮助确定权利要求书保护的主题的范围。权利要求书保护的主题不限于用于解决在
技术介绍
中提到的任何或全部缺点的实现方式。附图说明本专利技术的方面通过举例的方式示出但不受附图的限制,附图中相同的附图标记表示元件。图1示出了根据一个实施例的分布式数据系统的示例;图2A和图2B示出了按照传统方法引用存储器管理系统中的数据的线程示例;图3A示出了引用存储在存储器中的数据的进程的两个线程的示例概述;图3B示出了根据图3A的计数器的分层计数器数据结构;图3C示出了实现图3B的分层计数器数据结构的示例调用流程;图3D示出了多线程进程的示例,其中将父线程和子线程参考数据分配到存储器中;图4A–4B示出了根据图1和图3A–3D中公开的实施例的参考计数流程图;图5示出了根据图3A–3B、图3D和图4A–4B的本地线程计数器的流程图的一个实施例;图6示出了可用于实现各种实施例的网络系统的框图。具体实施方式本专利技术涉及使用参考计数器进行存储器管理的技术。存储器管理长期一直使用参考计数器跟踪引用存储器中存储的(指向)数据(对象)的线程数量。如上所述,随着计算系统中的线程数量增加,所述存储器管理可能导致发布的参考计数指令数量本文档来自技高网
...

【技术保护点】
1.一种计算机实现的参考计数方法,其特征在于,包括:创建与父线程引用的对象对应的父线程计数器,所述父线程计数器包括分层计数器数据结构;创建子线程的子线程计数器,所述子线程计数器包括所述分层计数器数据结构,并将对所述对象的所述引用从所述父线程传递到所述子线程;更新所述父线程计数器中的所述分层计数器数据结构以引用所述子线程计数器,并更新所述子线程计数器中的所述分层计数器数据结构以指向所述父线程计数器;当所述子线程完成处理时通知所述父线程计数器。

【技术特征摘要】
【国外来华专利技术】2017.03.10 US 15/456,1401.一种计算机实现的参考计数方法,其特征在于,包括:创建与父线程引用的对象对应的父线程计数器,所述父线程计数器包括分层计数器数据结构;创建子线程的子线程计数器,所述子线程计数器包括所述分层计数器数据结构,并将对所述对象的所述引用从所述父线程传递到所述子线程;更新所述父线程计数器中的所述分层计数器数据结构以引用所述子线程计数器,并更新所述子线程计数器中的所述分层计数器数据结构以指向所述父线程计数器;当所述子线程完成处理时通知所述父线程计数器。2.根据权利要求1所述的计算机实现的方法,其特征在于:创建所述父线程计数器包括初始化所述分层计数器数据结构,以将父计数值设置为初始值1,将所述父线程的状态设置为活动,将子项列表设置为空,并将指针设置为空;创建所述子线程计数器包括初始化所述分层计数器数据结构,以将子计数值设置为初始值1,将所述父线程的状态设置为活动,将子项列表设置为空,并将指针设置为指向所述父线程计数器。3.根据权利要求2所述的计算机实现的方法,其特征在于,更新所述分层计数器数据结构包括:当所述父线程添加对所述对象的引用时,增加所述父线程计数器的所述父计数值;当父线程删除对所述对象的所述引用时,减少所述父线程计数器的所述父计数值;当所述子线程添加对所述对象的引用时,增加所述子引用计数器的所述子计数值;当所述子线程删除对所述对象的所述引用时,减少所述子引用计数器的所述子计数值。4.根据权利要求3所述的计算机实现的方法,其特征在于,还包括:完成处理后,将所述父线程和所述子线程的所述状态从活动改变为非活动;独立修改所述父线程和所述子线程中的子项列表,以添加或删除子计数器;将用于新添加子项的所述指针设置为指向直接父计数器。5.根据权利要求3所述的计算机实现的方法,其特征在于,删除对所述对象的所述引用包括:根据所述子线程计数值确定所述子线程计数器是否已完成处理;检查所述子线程计数器是否有所述子项列表;为响应所述子线程计数器的所述子计数值为零、所述子线程计数器的所述子线程列表为空或所述子项列表中列出的所述子线程全部为非活动以及所述子线程的所述状态为非活动,删除对所述对象的所述引用。6.根据权利要求5所述的计算机实现的方法,其特征在于,还包括:根据所述父计数值确定所述父线程计数器是否已完成处理;检查所述父线程中的所述指针;释放所述存储器中的所述对象,以响应所述指针为空和所述父线程的所述状态为非活动。7.根据权利要求1至6中任一项所述的计算机实现的方法,其特征在于,所述分层计数器数据结构包括计算对所述对象的所述引用数量的计数值,指示所述对象的状态为活动或非活动的变量、子计数器列表以及指向父计数器的指针。8.根据权利要求7所述的计算机实现的方法,其特征在于:指示对所述对象的所述引用数量的所述计数值由所述父线程和所述子线程中的一个独立修改;所述状态从活动状态改变为非活动状态;所述子计数器列表为所述线程中对应的一个线程标识各个子计数器;在初始创建所述线程计数器中的一个时设置所述指针。9.根据权利要求1至8中任一项所述的计算机实现的方法,其特征在于,所述父线程计数器和所述子线程计数器采用无锁参考计数。10.一种用于参考计数的设备,其特征在于,包括:非瞬时性存储器,包括指令;一个或多个处理器,与所述存储器通信,其中所述一个或多个处理器执行所述指令完成以下操作,包括:创建与父线程引用的对象对应的父线程计数器,所述父线程计数器包括分层计数器数据结构;创建子线程的子线程计数器,所述子线程计数器包括所述分层计数器数据结构,并将对所述对象的所述引用从所述父线程传递到所述子线程;无锁定更新所述父线程计数器中的所述分层计数器数据结构以引用所述子线程计数器,并更新所述子线程计数器中的所述分层计数器数据结构以指向所述父线程计数器;当所述子线程完成处理时通知所述父线程计数器。11.根据权利要求10所述的设备,其特征在于:创建所述父线程计数器包括初始化所述分层计数器数据结构,以将父计数值设置为初始值1,将所述父线程的状态设置为活动,将子项列表设置为空,并将指针设置为空;创建所述子线程计数器包括初始化所述分层计数器数据结构,以将子计数值设置为初始值1,将所述父线程的状态设置为活动,将子项列表设置为空,并将指针设置为指向所述父线程计...

【专利技术属性】
技术研发人员:雷扎·亚达尼称王海川马林
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1