[发明专利]一种并发算法在审
申请号: | 202111051737.2 | 申请日: | 2021-09-09 |
公开(公告)号: | CN113742092A | 公开(公告)日: | 2021-12-03 |
发明(设计)人: | 李永进;张骄阳 | 申请(专利权)人: | 李永进 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 河南省南阳市*** | 国省代码: | 河南;41 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 并发 算法 | ||
随着计算机并行时代的到来,基于锁的并发控制非常容易导致宝贵的CPU时间被浪费在等待上。为了解决这个问题,本发明提出一种无锁并发算法,将一个程序按照线程为单位,分别划分为多个代码块,分别交给各CPU或独立执行模块(以下称为CPU核)执行。将具有同一互斥关系的代码块依次执行,避免了CPU空转等待,又可以设置执行顺序和优先级。在本算法支持下,计算机系统甚至将不再需要硬件锁及其相关指令。
技术领域
本技术属于计算机软件、硬件算法、编译优化领域。
背景技术
随着计算机技术的发展,如今的计算机硬件和软件都进入了并行时代,这使得目前的软硬件并发技术遇到了空前的挑战。在高并发情况下,数据的一致性同步变得困难,基于锁的并发控制非常容易导致宝贵的CPU时间被浪费在等待上。为了解决这个问题,本发明提出一种从底层技术到上层应用都可以使用的算法,让系统的等待时间趋近于0,同时简化并发编程和硬件的复杂度,提高计算机系统的性能,降低系统的设计难度。
发明内容
本发明为一种并发算法,算法的主要内容是:将一个程序按照线程为单位,分别划分为多个代码块,分别交给各CPU或独立执行模块(以下称为CPU核)执行。其中,在具有同一互斥关系的代码块的集合中,同一时间只能有一个该代码块执行。该代码块执行完之后才能执行同一互斥关系的另一个代码块。这样就避免了CPU 空转等待,又可以设置执行顺序和优先级。在本算法支持下,计算机系统甚至将不再需要硬件锁及其相关指令。
现代多核计算机程序通常使用锁、临界区等机制,保证某块代码在线程间的访问安全。但是这种机制是抢占式的,存在CPU核的空转等待等问题。因此,本发明提出一种新的结构,在逻辑上保证一组互斥的代码块中,同一时间只能执行一个代码块。称这种代码块为互斥块。具有同一个互斥关系的代码块集合,称为互斥组。这种机制依靠的是程序的执行顺序,而非软硬件锁机制。详细过程如下:
程序运行时启动多个线程(单线程程序不在考虑之内)(见图1),各线程分别调度代码给CPU核执行(见图2)。例如,图1 中所示,程序中有m个线程,每个线程有n个代码块,分别从Code_blockm1到Code_blockmn。将这些代码块调度给k个CPU核,调度结果假设为图2,不包括任何互斥要求。但如果线程之间存在互斥组(见图3,Code_mutex13表示互斥组1,互斥块号为3),则在执行互斥组内的任意互斥块时,只有一个互斥块被执行,其他需要执行的互斥块只能等待。该互斥块执行完毕之后,再执行互斥组内的另一个互斥块,直到执行完整个互斥组中需要执行的互斥块(见图4,其他代码块执行可能没有图中这么规整,只用作示意。)。在整个执行过程中没有使用锁,也没有产生任何的CPU空转。
在此基础上,对于特定线程还可以指定一个优先级规则,使该线程按照该规则执行。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于李永进,未经李永进许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111051737.2/2.html,转载请声明来源钻瓜专利网。