CN110704198B - 数据操作方法、装置、存储介质以及处理器 - Google Patents
数据操作方法、装置、存储介质以及处理器 Download PDFInfo
- Publication number
- CN110704198B CN110704198B CN201810752077.2A CN201810752077A CN110704198B CN 110704198 B CN110704198 B CN 110704198B CN 201810752077 A CN201810752077 A CN 201810752077A CN 110704198 B CN110704198 B CN 110704198B
- Authority
- CN
- China
- Prior art keywords
- data operation
- type
- locking
- variable
- path
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 80
- 230000007717 exclusion Effects 0.000 claims abstract description 98
- 238000012545 processing Methods 0.000 description 26
- 238000012423 maintenance Methods 0.000 description 15
- 230000008569 process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001747 exhibiting effect Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 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/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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据操作方法、装置、存储介质以及处理器。其中,该方法包括:判断是否采用加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第一类型数据操作与第二类型数据操作的互斥;在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。本申请解决了现有的采用互斥锁读写数据的方式导致数据读写操作的耗时长的技术问题。
Description
技术领域
本申请涉及信息处理领域,具体而言,涉及一种数据操作方法、装置、存储介质以及处理器。
背景技术
目前,在块存储系统的实现中,需要若干层级的IO(Input Output,读写)转发系统将云磁盘的IO请求递交到物理硬盘中,其中,每一级的IO转发系统都会维护当前的统计数据,例如,已处理的IO请求的数量、当前正在处理的IO请求的信息等。上述统计数据通常由IO转发系统中负责处理IO请求的读写线程来进行更新操作。例如,负责处理IO请求的线程正在处理IO请求A,此时,负责处理IO请求的线程根据IO请求A更新当前的统计数据。在完成对IO请求A的处理之后,负责处理IO请求的线程已经处理的IO请求数量有所增加,并将IO请求A的详细信息加入到负责处理IO请求的线程所负责的IO信息列表中。
需要说明的是,上述统计数据通常是通过运维命令来进行读取或展示,例如,运维人员每周查看云服务器所处理的IO请求数量,或者在业务高峰期查看IO转发系统正在处理的IO请求的数量等。在实际应用中,由于处理IO请求的线程的重要等级要高于通过运维命令来读取或展示数据的等级,因此,为避免运维展示占用处理IO请求的处理时间,造成不必要的延迟,通常将运维展示与IO请求的处理放置在不同的线程中。另外,为保证数据的正确性,在对IO请求进行更新(即进行写操作)和展示(即进行读操作)的过程中,需要实现两者的互斥。
在现有技术中,可通过在统计数据的内存区域设置互斥锁来使多个线程间互斥。如图1和图2所示,其中,图1示出了数据写操作的方法流程,图2示出了数据读操作的方法流程。当需要读取或者修改统计数据时,首先获取互斥锁的使用权,即请求获取互斥锁。在获取互斥锁成功之后,完成对应的写操作或读操作,并在完成写操作或读操作之后,解除互斥锁的占用。然而,上述方案对线程进行加锁耗时较大,当IO转发系统对操作耗时很敏感时,加锁操作可能会给服务器带来较为明显的性能损失。另外,对于轻量级的锁实现(例如,CAS操作、Peterson锁等),其依赖于硬件上的原子操作命令,或者需要多次操作内存变量,其对计算机性能也会产生较大的影响。
针对上述现有的采用互斥锁读写数据的方式导致数据读写操作的耗时长的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种数据操作方法、装置、存储介质以及处理器,以至少解决现有的采用互斥锁读写数据的方式导致数据读写操作的耗时长的技术问题。
根据本发明实施例的一个方面,提供了一种数据操作方法,包括:判断是否采用加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第一类型数据操作与第二类型数据操作的互斥;在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。
根据本发明实施例的另一方面,还提供了一种数据操作方法,包括:读取第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;在读取的第一变量的值为第二类型数据操作不请求加锁访问的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥。
根据本发明实施例的另一方面,还提供了一种数据操作方法,包括:设置第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;在确定第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第二类型数据操作。
根据本发明实施例的另一方面,还提供了一种数据操作装置,包括:判断模块,用于判断是否采用加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥;第一执行模块,用于在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。
根据本发明实施例的另一方面,还提供了一种数据操作装置,包括:读取模块,用于读取的第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;第二执行模块,用于在读取的第一变量的值为第二类型数据操作不请求加锁访问的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥。
根据本发明实施例的另一方面,还提供了一种数据操作装置,包括:设置模块,用于设置第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;第三执行模块,用于在确定第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第二类型数据操作。
根据本发明实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行数据操作方法。
根据本发明实施例的另一方面,还提供了一种处理器,该处理器用于运行程序,其中,程序运行时执行数据操作方法。
在本发明实施例中,采用根据内存变量确定是否对第一类型数据操作进行加锁的方式,通过判断是否采用加锁路径执行第一类型数据操作,并在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。在上述过程中,在不同的判断结果下,采用不同的路径执行不同类型的数据操作。另外,采用采用非加锁路径执行概率较高的数据操作,例如,在展示统计数据时,对数据读操作的概率较低,因此,可采用加锁路径执行数据读操作,采用非加锁路径执行数据写操作。而采用非加锁路径执行概率较高的数据操作,无需请求互斥锁,进而上述方案可有效降低加锁所造成的耗时。另外,在判断结果为否的情况下,采用加锁路径执行概率较高的数据操作,还可保证数据读写的稳定性。由此可见,本申请所提供的方案可以达到降低加锁所导致的数据读写操作的耗时目的,从而实现了提高数据读写效率的技术效果,进而解决了现有的采用互斥锁读写数据的方式导致数据读写操作的耗时长的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据现有技术的一种数据写操作的方法流程;
图2是根据现有技术的一种数据读操作的方法流程;
图3是根据本发明实施例的一种数据操作方法的流程图;
图4是根据本发明实施例的一种可选的数据写操作的方法流程图;
图5是根据本发明实施例的一种可选的数据读操作的方法流程图;
图6是根据本发明实施例的一种数据操作方法的流程图;
图7是根据本发明实施例的一种数据操作方法的流程图;
图8是根据本发明实施例的一种数据操作装置的结构示意图;
图9是根据本发明实施例的一种数据操作装置的结构示意图;
图10是根据本发明实施例的一种数据操作装置的结构示意图;以及
图11是根据本发明实施例的一种计算机终端的硬件结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
云服务器,由云主机厂商所提供,基于云计算技术生产出来,用于使用户通过远程登陆的方式对服务器进行操作管理,其中,用户对云服务器的操作管理与对普通的远程物理服务器的操作管理相同。
云磁盘,为建立在分布式存储系统上的磁盘实例,其中,在云服务器中,云磁盘可作为计算机磁盘进行读写。
IO请求,指用户对云磁盘进行读写操作时所产生的读写请求,其中,每个读写请求为一个IO请求。
IO转发系统,指从使用云磁盘的云服务器到后端存储数据的存储系统之间,需要多台物理服务器传输数据,每台服务器中具有转发IO请求的程序或应用,该程序或应用即为IO转发系统。
统计信息采集,指为使运维人员了解服务器的运行状况,IO转发系统中需要采集和统计IO请求的相关信息,例如,预设时间段内处理的IO请求的个数、处理消耗的时间等。服务器在处理每个IO请求时需要对统计数据进行更新,而并根据运维人员的需求展示数据。
互斥锁,为操作系统所提供的编程对象,用于保证在任意时刻,仅允许一个线程访问该对象。
实施例1
根据本申请实施例,还提供了一种数据操作方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
此外,还需要说明的是,本申请所提供的数据操作方法可以广泛应用在云计算供应商的块存储的相关产品中。本申请为写操作设置了两种途径:加锁路径和非加锁路径,其中,非加锁路径为快速完成写操作的路径,而加锁路径为慢速完成写操作的路径。由于在极少数情况下才需要通过数据读操作展示数据,因此,在本申请中,在对数据执行写操作的过程中,大部分采用非加锁路径执行数据写操作,而少数情况下采用加锁路径执行数据写操作。由此可见,本申请与现有技术相比,增加了非加锁路径,采用非加锁路径执行数据写操作可以提高数据读写效率。另外,在采用非加锁路径执行数据写操作的过程中,云服务器仅需要访问单个内存变量即可,而无需通过加锁方法执行数据写操作。由于系统访问内存变量的时间要远远小于系统执行加锁操作的时间,因此,本申请还可达到降低数据读写操作的耗时的技术效果。
具体的,图3是根据本申请实施例一的数据操作方法的流程图,由图3可知,该方法包括以下步骤:
步骤S302,判断是否采用加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥。
需要说明的是,本实施例中的执行主体为服务器中的读写单元。可选的,当对数据的读写操作发生在服务器上时,例如,对IO请求进行转发时,服务器的读写单元判断是否采用加锁路径。
在一种可选的方案中,读写单元可对服务器中的线程进行实时监控,当读写单元检测到服务器启用展示或读取数据的线程时,或者,读写单元检测到运维命令时,读写单元可确定对第二类型数据操作请求采用加锁路径进行访问。此时,读写单元将内存中的特定变量进行赋值,该赋予特定变量的值表明服务器采用加锁路径执行第一类型数据操作。类似的,当读写单元检测到服务器正在对IO请求进行转发时,读写单元可确定对第二类型数据操作请求采用非加锁路径进行访问。此时,读写单元将内存中的特定变量赋予另一个值,该值表明服务器采用非加锁路径执行第一类型数据操作。
需要说明的是,在上述过程中,运维命令为用户发出的用于指示读取或展示数据统计信息的命令。可选的,生成运维命令的时间间隔大于处理IO请求的时间间隔。
步骤S304,在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。
需要说明的是,在步骤S304中,在判断结果为否的情况下,说明服务器正在处理IO请求。由于服务器在大部分情况下是在处理IO请求,因此,不采用互斥锁直接处理IO请求可有效降低加锁所导致的数据读写操作的耗时。
可选的,第一类型数据操作可以作为数据读操作,此时,第二类型数据操作为数据写操作。类似的,第一类型数据操也可以作为数据写操作,此时,第二类型数据操作为数据读操作。
在一种可选的方案中,在运维人员对数据进行数据读操作的频率要大于对数据进行写操作的频率的情况下,将第一类型数据操作设置为数据读操作,将第二类型数据操作设置为数据写操作。在该场景下,在判断结果为是的情况下,采用加锁路径执行数据读操作,保证读取数据的稳定性和可靠性。另外,在判断结果为否的情况下,采用非加锁路径执行数据读操作,即采用非加锁路径执行概率较高的操作,可以降低加锁所造成的耗时,进而提高数据的读写效率。
在另一种可选的方案中,在运维人员对数据进行数据写操作的频率要大于对数据进行读操作的频率的情况下,将第一类型数据操作设置为数据读操作,并将第二类型数据操设置为数据写操作。在该场景下,在判断结果为是的情况下,采用加锁路径执行数据写操作,保证数据写入的稳定性和可靠性。另外,在判断结果为否的情况下,采用非加锁路径执行数据写操作,即采用非加锁路径执行概率较高的操作,可以降低加锁所造成的耗时,进而提高数据的读写效率。
基于步骤S302至步骤S304所限定的方案,可以获知,采用根据内存变量确定是否对第一类型数据操作进行加锁的方式,通过判断是否采用加锁路径执行第一类型数据操作,并在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。
容易注意到的是,在上述过程中,在不同的判断结果下,采用不同的路径执行不同类型的数据操作。另外,采用采用非加锁路径执行概率较高的数据操作,例如,在展示统计数据时,对数据读操作的概率较低,因此,可采用加锁路径执行数据读操作,采用非加锁路径执行数据写操作。而采用非加锁路径执行概率较高的数据操作,无需请求互斥锁,进而上述方案可有效降低加锁所造成的耗时。另外,在判断结果为否的情况下,采用加锁路径执行概率较高的数据操作,还可保证数据读写的稳定性。
由此可见,本申请所提供的方案可以达到降低加锁所导致的数据读写操作的耗时目的,从而实现了提高数据读写效率的技术效果,进而解决了现有的采用互斥锁读写数据的方式导致数据读写操作的耗时长的技术问题。
在一种可选的方案中,在确定执行第一类型数据操作的执行路径之前,需要判断是否采用加锁路径执行第一类型数据操作,具体方法可以包括:
步骤S3020,获取第一类型数据操作读取的第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;
步骤S3022,根据获取的第一变量的值,判断是否采用加锁路径执行第一类型数据操作。
可选的,可通过以下至少之一判断是否采用加锁路径执行第一类型数据操作:在第一变量的值为第二类型数据操作不请求加锁访问的情况下,确定不采用加锁路径执行第一类型数据操作;在第一变量的值为第二类型数据操作请求加锁访问的情况下,确定采用加锁路径执行第一类型数据操作。具体的,第一变量为普通的内存变量,在本申请中定义为need_lock,该变量的操作效率较高,当第一变量的值发生变化时,其他线程可能无法感知到第一变量发生的更新,例如,第一变量的值由true更新为false。如图4所示的数据写操作的方法流程图,当need_lock取值为true时,表示需要采用加锁路径完成数据写操作;当need_lock取值为false时,表示需要采用非加锁路径完成数据写操作。
需要说明的是,读写单元中的写操作线程在访问第一变量,并确定第一变量的值为false的情况下,读写单元即可执行写操作,而无需加锁。另外,在执行读操作线程时,需要将第一变量置为true,表明第二类型数据操作需要请求加锁访问;如图5所示的数据读操作的方法流程图。由于第一变量更新之后,写操作线程无法立即确定第一变量的值是否发生更新,因此,在确定采用加锁路径执行第一类型数据操作之前,还需要确定第二变量的值,第二变量可以为volatile变量,其中,当volatile变量的值发生更新时,其他线程可立刻感知到volatile变量的值发生了变化。具体步骤如下:
步骤S30,获取第一类型数据操作设置的第二变量的值,其中,第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;
步骤S32,在获取的第二变量的值为第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,确定第一变量的值为数据读数据请求加锁访问。
具体的,读写单元获取第二变量的值,如图4所示,第二变量的值为true,表明第一类型数据操作(例如,写操作线程)已知晓第二类型数据操作(例如,读操作线程)请求加锁访问,并进入到加锁路径,如图4和图5所示,请求获取互斥锁,并在完成数据写操作之后,解除互斥锁的占用。
需要说明的是,如图4所示,在采用非加锁路径执行数据写操作的过程中,由于未使用互斥锁,因此,在完成数据写操作之后,也无需解除互斥锁的占用。
另外,在确定采用加锁路径执行数据写操作之后,读写单元采用加锁路径执行第一类型数据操作,并在采用加锁路径执行第一类型数据操作结束之后,将第一变量设置为第二类型数据操作不请求加锁访问。如图5所示,在数据访问完成之后,第二类型数据操作(例如,数据读操作)将第一变量设置为false,将第二变量也设置为false。第一类型数据操作(例如,数据写操作)在确定第一变量置为false之后,采用非加锁路径执行数据写操作。
需要说明的是,由上述内容可知,本申请所提供的方案可适用于IO转发系统中数据频繁更新,但读取或展示的频率较低的场景,实现了基于变量的互斥访问。本申请所提供的方案在数据更新,即第一类型数据操作(例如,数据写操作)时,采用耗时较短的非加锁路径,可以减少数据访问的耗时。另外,本申请还提供了一种切换方案,即在采用加锁路径完成第二类型数据操作(例如,数据读操作)之后,能够进入到采用非加锁路径执行第一类型数据操作(例如,数据写操作)的过程,进而保证了服务器系统中的数据的可靠性。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的数据操作方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
实施例2
根据本申请实施例,还提供了一种数据操作方法,其中,图6示出了一种数据操作方法的流程图,如图6所示,该方法包括:
步骤S602,读取第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问。
在步骤S602中,第一变量为服务器内存中的变量,在本申请中定义为need_lock,该变量的操作效率较高。其中,当第一变量的值发生变化时,其他线程可能无法感知到第一变量发生的更新,例如,第一变量的值由true更新为false。如图4所示,当need_lock取值为true时,表示需要采用加锁路径完成第一类型数据操作;当need_lock取值为false时,表示需要采用非加锁路径完成第一类型数据操作。
在一种可选的方案中,服务器中的读写单元每隔预设时间读取一次存储在服务器内存中的第一变量,并根据第一变量的值来确定第二类型数据操作(即读操作线程)是否请求加锁访问。其中,当用户需要读取或展示数据统计信息时,通过服务器生成运维命令。在接收到运维命令的情况下,服务器内存中的第一变量置为true,表示数据读操作请求加锁访问。
步骤S604,在读取的第一变量的值为数据读操作不请求加锁访问的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径,互斥锁用于实现数据读操作与第一类型数据操作的互斥。
需要说明的是,在步骤S604中,当采用非加锁路径执行第一类型数据操作时,说明服务器正在处理IO请求。由于服务器在大部分情况下是在处理IO请求,因此,不采用互斥锁直接处理IO请求可有效降低加锁所导致的数据读写操作的耗时。
另外,第一类型数据操作为执行概率较高的操作,第二类型数据操作为执行概率较低的操作。可选的,第一类型数据操作可以作为数据读操作,此时,第二类型数据操作为数据写操作。类似的,第一类型数据操也可以作为数据写操作,此时,第二类型数据操作为数据读操作。
此外,还需要说明的是,在确定第二类型数据操作不请求加锁访问的情况下,采用非加锁路径执行概率较高的操作,即执行第一类型数据操作,可以达到降低加锁所导致的数据读写操作的耗时的目的,进而实现了提高数据读写速率的效果。
基于步骤S602至步骤S604所限定的方案,可以获知,采用根据内存变量确定是否对第一类型数据操作进行加锁的方式,通过读取第一变量的值,并在读取的第一变量的值为第二类型数据操作不请求加锁访问的情况下,采用非加锁路径执行第一类型数据操作,其中,第一变量用于标识第二类型数据操作是否请求加锁访问,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥。
容易注意到的是,采用采用非加锁路径执行概率较高的数据操作,例如,在展示统计数据时,对数据读操作的概率较低,因此,可采用加锁路径执行数据读操作,采用非加锁路径执行数据写操作。而采用非加锁路径执行概率较高的数据操作,无需请求互斥锁,进而上述方案可有效降低加锁所造成的耗时。另外,在展示统计数据的情况下,采用加锁路径执行概率较高的数据操作,还可保证数据读写稳定性。
由此可见,本申请所提供的方案可以达到降低加锁所导致的数据读写操作的耗时目的,从而实现了提高数据读写效率的技术效果,进而解决了现有的采用互斥锁读写数据的方式导致数据读写操作的耗时长的技术问题。
在一种可选的方案中,在读取的第一变量的值之后,根据如下至少之一判定是否采用加锁路径执行第一类型数据操作:在第一变量的值为第二类型数据操作不请求加锁访问的情况下,确定不采用加锁路径执行第一类型数据操作;在读取的第一变量的值为第二类型数据操作请求加锁访问的情况下,即在第一变量的值为true的情况下,采用加锁路径执行第一类型数据操作。如图4所示,在第一变量为false的情况下,采用无需加锁,且耗时较少的非加锁路径执行第一类型数据操作(例如,数据写操作);在第一变量为true的情况下,采用请求互斥锁,且耗时较长的加锁路径执行第一类型数据操作(例如,数据写操作)。
需要说明的是,由于第一变量更新之后,写操作线程无法立即确定第一变量的值是否发生更新,因此,在确定采用加锁路径执行第一类型数据操作(例如,数据写操作)之前,还需要确定第二变量的值,第二变量可以为volatile变量,其中,当volatile变量的值发生更新时,其他线程可立刻感知到volatile变量的值发生了变化。具体步骤如下:
步骤S60,设置第二变量的值,其中,第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;
步骤S62,在将第二变量的值设置为第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第一类型数据操作。
在一种可选的方案中,第一类型数据操作(例如,数据写操作)在确定第二类型数据操作(例如,数据读操作)请求加锁访问的情况下,数据写操作将第二变量的值设置为true,该值表示数据写操作已知晓数据读操作请求加锁访问。在完成第二变量的值的设置之后,数据写操作采用加锁路径执行数据写操作,并在数据写操作完成之后,解除互斥锁的占用,如图4所示。
需要说明的是,在采用非加锁路径执行第一类型数据操作的过程中,由于未使用互斥锁,因此,在完成第一类型数据操作之后,也无需解除互斥锁的占用。
实施例3
根据本申请实施例,还提供了一种数据操作方法,其中,图7示出了一种数据操作方法的流程图,如图7所示,该方法包括:
步骤S702,设置第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问。
在步骤S702中,第一变量为服务器内存中的变量,在本申请中定义为need_lock,该变量的操作效率较高。其中,当第一变量的值发生变化时,其他线程可能无法感知到第一变量发生的更新,例如,第一变量的值由true更新为false。如图4所示,当need_lock取值为true时,表示需要采用加锁路径完成第一类型数据操作;当need_lock取值为false时,表示需要采用非加锁路径完成第一类型数据操作。
在一种可选的方案中,服务器中的读写单元每隔预设时间读取一次存储在服务器内存中的第一变量,并根据第一变量的值来确定第二类型数据操作(例如,读操作线程)是否请求加锁访问。其中,当用户需要读取或展示数据统计信息时,通过服务器生成运维命令。在接收到运维命令的情况下,服务器将内存中的第一变量置为true,表示第二类型数据操作请求加锁访问。
步骤S704,在确定第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第二类型数据操作。
在一种可选的方案中,在设置完成第一变量的值之后,第一类型数据操作(例如,数据写操作)根据第一变量的值即可确定第二类型数据操作(例如,数据读操作)是否请求加锁访问,在确定数据读操作请求加锁访问的情况下,数据写操作向数据读操作反馈信息,该信息表示数据写操作已知晓数据读操作请求加锁访问,同时,数据写操作也进入加锁路径。此时,数据读操作基于反馈的信息也进入到加锁路径中,与数据写操作进行互斥。
需要说明的是,第一类型数据操作为执行概率较高的操作,第二类型数据操作为执行概率较低的操作。可选的,第一类型数据操作可以作为数据读操作,此时,第二类型数据操作为数据写操作。类似的,第一类型数据操也可以作为数据写操作,此时,第二类型数据操作为数据读操作。
此外,还需要说明的是,在确定第二类型数据操作请求加锁访问的情况下,采用加锁路径执行概率较低的操作,即执行第二类型数据操作,同样可以达到降低加锁所导致的数据读写操作的耗时的目的,进而实现了提高数据读写速率的效果。
基于步骤S702至步骤S704所限定的方案,可以获知,采用根据内存变量确定是否对第一类型数据操作进行加锁的方式,通过设置第一变量的值,并在在确定第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第二类型数据操作,其中,第一变量用于标识第二类型数据操作是否请求加锁访问。
容易注意到的是,采用采用非加锁路径执行概率较高的数据操作,例如,在展示统计数据时,对数据读操作的概率较低,因此,可采用加锁路径执行数据读操作,采用非加锁路径执行数据写操作。而采用非加锁路径执行概率较高的数据操作,无需请求互斥锁,进而上述方案可有效降低加锁所造成的耗时。另外,在展示统计数据的情况下,采用加锁路径执行概率较高的数据操作,还可保证数据读写的稳定性。
由此可见,本申请所提供的方案可以达到降低加锁所导致的数据读写操作的耗时目的,从而实现了提高数据读写效率的技术效果,进而解决了现有的采用互斥锁读写数据的方式导致数据读写操作的耗时长的技术问题。
在一种可选的方案中,在读取的第一变量的值之后,根据如下至少之一判定是否采用加锁路径执行第一类型数据操作:在第一变量的值为第二类型数据操作不请求加锁访问的情况下,确定不采用加锁路径执行第一类型数据操作;在读取的第一变量的值为第二类型数据操作请求加锁访问的情况下,即在第一变量的值为true的情况下,采用加锁路径执行第一类型数据操作。如图4所示,在第一变量为false的情况下,采用无需加锁,且耗时较少的非加锁路径执行第一类型数据操作(例如,数据写操作);在第一变量为true的情况下,采用请求互斥锁,且耗时较长的加锁路径执行第一类型数据操作(例如,数据写操作)。
需要说明的是,由于第一变量更新之后,写操作线程无法立即确定第一变量的值是否发生更新,因此,在确定采用加锁路径执行第一类型数据操作之前,还需要确定第二变量的值,第二变量可以为volatile变量,其中,当volatile变量的值发生更新时,其他线程可立刻感知到volatile变量的值发生了变化。具体步骤如下:
步骤S70,读取第二变量的值,其中,第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;
步骤S72,依据第二变量的值确定第一类型数据操作知晓第二类型数据操作请求加锁访问。
在一种可选的方案中,第一类型数据操作(例如,数据写操作)在确定第二类型数据操作(例如,数据读操作)请求加锁访问的情况下,数据写操作将第二变量的值设置为true,该值表示数据写操作已知晓数据读操作请求加锁访问。数据读操作读取第二变量的值,其中,如果第二变量的值为true,如图5所示,则数据读操作可确定数据写操作已知晓数据读操作请求加锁访问,此时,数据读操作请求互斥锁,完成数据的读操作,并在数据读操作完成之后,解除互斥锁的占用,如图5所示。
进一步地,在采用加锁路径执行第二类型数据操作之后,服务器的读写单元还将第一变量设置为第二类型数据操作不请求加锁访问。如图5所示,在数据访问完成之后,第二类型数据操作(例如,数据读操作)将第一变量设置为false,将第二变量也设置为false。数据写操作在确定第一变量置为false之后,采用非加锁路径执行数据写操作。
实施例4
根据本申请实施例,还提供了一种用于实施上述数据操作方法的数据操作装置,如图8所示,该装置80包括:判断模块801以及第一执行模块803。
其中,判断模块801,用于判断是否采用加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥;第一执行模块803,用于在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。
此处,需要说明的是,上述判断模块801以及第一执行模块803对应于实施例1中的步骤S302至步骤S304,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。
在一种可选的方案中,判断模块包括:第一获取模块以及第一判断模块。其中,第一获取模块,用于获取第一类型数据操作读取的第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;第一判断模块,用于根据获取的第一变量的值,判断是否采用加锁路径执行第一类型数据操作。
此处,需要说明的是,上述第一获取模块以及第一判断模块对应于实施例1中的步骤S3020至步骤S3022,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。
在一种可选的方案中,根据获取的第一变量的值,判断是否采用加锁路径执行第一类型数据操作包括以下至少之一:在第一变量的值为第二类型数据操作不请求加锁访问的情况下,确定不采用加锁路径执行第一类型数据操作;在第一变量的值为第二类型数据操作请求加锁访问的情况下,确定采用加锁路径执行第一类型数据操作。
在一种可选的方案中,数据操作装置还包括:第二获取模块以及确定模块。其中,第二获取模块,用于获取第一类型数据操作设置的第二变量的值,其中,第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;确定模块,用于在获取的第二变量的值为第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,确定第一变量的值为数据读数据请求加锁访问。
此处,需要说明的是,上述第二获取模块以及确定模块对应于实施例1中的步骤S30至步骤S32,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。
在一种可选的方案中,数据操作装置还包括:设置模块。其中,设置模块,用于采用加锁路径执行第一类型数据操作,并在采用加锁路径执行第一类型数据操作结束之后,将第一变量设置为第二类型数据操作不请求加锁访问。
实施例5
根据本申请实施例,还提供了一种用于实施上述数据操作方法的数据操作装置,如图9所示,该装置90包括:读取模块901以及第二执行模块903。
其中,读取模块901,用于读取的第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;第二执行模块903,用于在读取的第一变量的值为第二类型数据操作不请求加锁访问的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥。
此处,需要说明的是,上述读取模块901以及第二执行模块903对应于实施例2中的步骤S602至步骤S604,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例二所公开的内容。
在一种可选的方案中,第一类型数据操作处理装置还包括:第四执行模块。其中,第四执行模块,用于在读取的第一变量的值为第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第一类型数据操作。
在一种可选的方案中,第四执行模块包括:设置模块以及第五执行模块。其中,设置模块,用于设置第二变量的值,其中,第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;第五执行模块,用于在将第二变量的值设置为第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第一类型数据操作。
此处,需要说明的是,上述设置模块以及第五执行模块对应于实施例2中的步骤S60至步骤S62,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例二所公开的内容。
实施例6
根据本申请实施例,还提供了一种用于实施上述数据操作方法的数据操作装置,如图10所示,该装置100包括:设置模块1001以及第三执行模块1003。其中,设置模块1001,用于设置第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;第三执行模块1003,用于在确定第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第二类型数据操作。
此处,需要说明的是,上述设置模块1001以及第三执行模块1003对应于实施例3中的步骤S702至步骤S706,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例三所公开的内容。
在一种可选的方案中,数据操作装置还包括:读取模块以及确定模块。其中,读取模块,用于读取第二变量的值,其中,第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;确定模块,用于依据第二变量的值确定第一类型数据操作知晓第二类型数据操作请求加锁访问。
此处,需要说明的是,上述读取模块以及确定模块对应于实施例3中的步骤S70至步骤S72,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例三所公开的内容。
在一种可选的方案中,数据操作装置还包括:执行模块。其中,执行模块,用于将第一变量设置为第二类型数据操作不请求加锁访问。
实施例7
本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
图11示出了一种计算机终端的硬件结构框图。如图11所示,计算机终端A可以包括一个或多个(图中采用1102a、1102b,……,1102n来示出)处理器1102(处理器1102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器1104、以及用于通信功能的传输装置1106。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图11所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端A还可包括比图11中所示更多或者更少的组件,或者具有与图11所示不同的配置。
应当注意到的是上述一个或多个处理器1102和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端A中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
处理器1102可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:判断是否采用加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥;在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。
存储器1104可用于存储应用软件的软件程序以及模块,如本申请实施例中的数据操作方法对应的程序指令/数据存储装置,处理器1102通过运行存储在存储器1104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的数据操作方法。存储器1104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1104可进一步包括相对于处理器1102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端A。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置1106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端A的通信供应商提供的无线网络。在一个实例中,传输装置1106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置1106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端A的用户界面进行交互。
此处需要说明的是,在一些可选实施例中,上述图11所示的计算机终端A可以包括硬件元件(包括电路)、软件元件(包括存储在计算机可读介质上的计算机代码)、或硬件元件和软件元件两者的结合。应当指出的是,图11仅为特定具体实例的一个实例,并且旨在示出可存在于上述计算机终端A中的部件的类型。
在本实施例中,上述计算机终端A可以执行应用程序的数据操作方法中以下步骤的程序代码:判断是否采用加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥;在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。
可选的,上述处理器还可以执行如下步骤的程序代码:获取第一类型数据操作读取的第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;根据获取的第一变量的值,判断是否采用加锁路径执行第一类型数据操作。
可选的,上述处理器还可以执行如下步骤的程序代码:根据获取的第一变量的值,判断是否采用加锁路径执行第一类型数据操作包括以下至少之一:在第一变量的值为第二类型数据操作不请求加锁访问的情况下,确定不采用加锁路径执行第一类型数据操作;在第一变量的值为第二类型数据操作请求加锁访问的情况下,确定采用加锁路径执行第一类型数据操作。
可选的,上述处理器还可以执行如下步骤的程序代码:获取第一类型数据操作设置的第二变量的值,其中,第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;在获取的第二变量的值为第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,确定第一变量的值为数据读数据请求加锁访问。
可选的,上述处理器还可以执行如下步骤的程序代码:采用加锁路径执行第一类型数据操作,并在采用加锁路径执行第一类型数据操作结束之后,将第一变量设置为第二类型数据操作不请求加锁访问。
本领域普通技术人员可以理解,图11所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternetDevices,MID)、PAD等终端设备。图11其并不对上述电子装置的结构造成限定。例如,计算机终端A还可包括比图11中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图11所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例8
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例所提供的数据操作方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:判断是否采用加锁路径执行第一类型数据操作,其中,加锁路径为采用互斥锁的路径,互斥锁用于实现第二类型数据操作与第一类型数据操作的互斥;在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取第一类型数据操作读取的第一变量的值,其中,第一变量用于标识第二类型数据操作是否请求加锁访问;根据获取的第一变量的值,判断是否采用加锁路径执行第一类型数据操作。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:根据获取的第一变量的值,判断是否采用加锁路径执行第一类型数据操作包括以下至少之一:在第一变量的值为第二类型数据操作不请求加锁访问的情况下,确定不采用加锁路径执行第一类型数据操作;在第一变量的值为第二类型数据操作请求加锁访问的情况下,确定采用加锁路径执行第一类型数据操作。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取第一类型数据操作设置的第二变量的值,其中,第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;在获取的第二变量的值为第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,确定第一变量的值为数据读数据请求加锁访问。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:采用加锁路径执行第一类型数据操作,并在采用加锁路径执行第一类型数据操作结束之后,将第一变量设置为第二类型数据操作不请求加锁访问。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (18)
1.一种数据操作方法,包括:
判断是否采用加锁路径执行第一类型数据操作,其中,所述加锁路径为采用互斥锁的路径,所述互斥锁用于实现第一类型数据操作与第二类型数据操作的互斥;
在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,所述非加锁路径为不采用所述互斥锁直接执行第一类型数据操作的路径,所述第一类型数据操作的执行概率高于所述第二类型数据操作的执行概率。
2.根据权利要求1所述的方法,其中,判断是否采用加锁路径执行第一类型数据操作包括:
获取第一类型数据操作读取的第一变量的值,其中,所述第一变量用于标识第二类型数据操作是否请求加锁访问;
根据获取的所述第一变量的值,判断是否采用所述加锁路径执行第一类型数据操作。
3.根据权利要求2所述的方法,其中,根据获取的所述第一变量的值,判断是否采用所述加锁路径执行第一类型数据操作包括以下至少之一:
在所述第一变量的值为第二类型数据操作不请求加锁访问的情况下,确定不采用所述加锁路径执行第一类型数据操作;
在所述第一变量的值为第二类型数据操作请求加锁访问的情况下,确定采用所述加锁路径执行第一类型数据操作。
4.根据权利要求3所述的方法,其中,在确定采用所述加锁路径执行第一类型数据操作之前,还包括:
获取第一类型数据操作设置的第二变量的值,其中,所述第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;
在获取的所述第二变量的值为第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,确定所述第一变量的值为第一类型数据操作请求加锁访问。
5.根据权利要求3所述的方法,其中,在确定采用所述加锁路径执行第一类型数据操作之后,还包括:
采用所述加锁路径执行第一类型数据操作,并在采用所述加锁路径执行第一类型数据操作结束之后,将所述第一变量设置为第二类型数据操作不请求加锁访问。
6.根据权利要求1至5中任一项所述的方法,其中,所述第一类型数据操作为数据读操作,所述第二类型数据操作为数据写操作。
7.根据权利要求1至5中任一项所述的方法,其中,所述第一类型数据操作为数据写操作,所述第二类型数据操作为数据读操作。
8.一种数据操作方法,包括:
读取第一变量的值,其中,所述第一变量用于标识第二类型数据操作是否请求加锁访问;
在读取的所述第一变量的值为第二类型数据操作不请求加锁访问的情况下,采用非加锁路径执行第一类型数据操作,其中,所述非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径,所述互斥锁用于实现第一类型数据操作与第二类型数据操作的互斥,所述第一类型数据操作的执行概率高于所述第二类型数据操作的执行概率。
9.根据权利要求8所述的方法,其中,在读取第一变量的值之后,还包括:
在读取的所述第一变量的值为第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第一类型数据操作。
10.根据权利要求9所述的方法,其中,采用加锁路径执行第一类型数据操作包括:
设置第二变量的值,其中,所述第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;
在将所述第二变量的值设置为第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第一类型数据操作。
11.一种数据操作方法,包括:
设置第一变量的值,其中,所述第一变量用于标识第二类型数据操作是否请求加锁访问;
在确定第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第二类型数据操作,并采用非加锁路径执行第一类型数据操作,其中,所述加锁路径为采用互斥锁的路径,所述互斥锁用于实现第一类型数据操作与第二类型数据操作的互斥,所述非加锁路径为不采用所述互斥锁直接执行第一类型数据操作的路径,所述第一类型数据操作的执行概率高于所述第二类型数据操作的执行概率。
12.根据权利要求11所述的方法,其中,在采用加锁路径执行第二类型数据操作之前,还包括:
读取第二变量的值,其中,所述第二变量用于标识第一类型数据操作是否知晓第二类型数据操作请求加锁访问;
依据所述第二变量的值确定第一类型数据操作知晓第二类型数据操作请求加锁访问。
13.根据权利要求11所述的方法,其中,在采用加锁路径执行第二类型数据操作之后,还包括:
将所述第一变量设置为第二类型数据操作不请求加锁访问。
14.一种数据操作装置,包括:
判断模块,用于判断是否采用加锁路径执行第一类型数据操作,其中,所述加锁路径为采用互斥锁的路径,所述互斥锁用于实现第一类型数据操作与第二类型数据操作的互斥;
第一执行模块,用于在判断结果为否的情况下,采用非加锁路径执行第一类型数据操作,其中,所述非加锁路径为不采用所述互斥锁直接执行第一类型数据操作的路径,所述第一类型数据操作的执行概率高于所述第二类型数据操作的执行概率。
15.一种数据操作装置,包括:
读取模块,用于读取的第一变量的值,其中,所述第一变量用于标识第二类型数据操作是否请求加锁访问;
第二执行模块,用于在读取的所述第一变量的值为第二类型数据操作不请求加锁访问的情况下,采用非加锁路径执行第一类型数据操作,其中,所述非加锁路径为不采用互斥锁直接执行第一类型数据操作的路径,所述互斥锁用于实现第一类型数据操作与第二类型数据操作的互斥,所述第一类型数据操作的执行概率高于所述第二类型数据操作的执行概率。
16.一种数据操作装置,包括:
设置模块,用于设置第一变量的值,其中,所述第一变量用于标识第二类型数据操作是否请求加锁访问;
第三执行模块,用于在确定第一类型数据操作知晓第二类型数据操作请求加锁访问的情况下,采用加锁路径执行第二类型数据操作,并采用非加锁路径执行第一类型数据操作,其中,所述加锁路径为采用互斥锁的路径,所述互斥锁用于实现第一类型数据操作与第二类型数据操作的互斥,所述非加锁路径为不采用所述互斥锁直接执行第一类型数据操作的路径,所述第一类型数据操作的执行概率高于所述第二类型数据操作的执行概率。
17.一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行权利要求1至13中任意一项所述的方法。
18.一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至13中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810752077.2A CN110704198B (zh) | 2018-07-10 | 2018-07-10 | 数据操作方法、装置、存储介质以及处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810752077.2A CN110704198B (zh) | 2018-07-10 | 2018-07-10 | 数据操作方法、装置、存储介质以及处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110704198A CN110704198A (zh) | 2020-01-17 |
CN110704198B true CN110704198B (zh) | 2023-05-02 |
Family
ID=69192946
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810752077.2A Active CN110704198B (zh) | 2018-07-10 | 2018-07-10 | 数据操作方法、装置、存储介质以及处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110704198B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111444002A (zh) * | 2020-03-25 | 2020-07-24 | 深圳前海微众银行股份有限公司 | 一种任务调度方法及装置 |
CN112087672B (zh) * | 2020-08-13 | 2021-11-23 | 浙江大学 | 一种使用智能终端及服务器的视频流描述生成方法 |
CN112416556B (zh) * | 2020-11-23 | 2023-10-20 | 西安西热电站信息技术有限公司 | 一种数据读写优先平衡方法、系统、装置及存储介质 |
CN114675968A (zh) * | 2022-03-25 | 2022-06-28 | 苏州浪潮智能科技有限公司 | 一种线程运行方法、系统、装置及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6795901B1 (en) * | 1999-12-17 | 2004-09-21 | Alliant Techsystems Inc. | Shared memory interface with conventional access and synchronization support |
CN101685406A (zh) * | 2008-09-27 | 2010-03-31 | 国际商业机器公司 | 用于对数据结构的实例进行操作的方法和系统 |
CN102651006A (zh) * | 2011-02-25 | 2012-08-29 | 上海网环信息科技有限公司 | 一种数据库表单记录加锁方法和装置 |
CN104572568A (zh) * | 2013-10-15 | 2015-04-29 | 阿里巴巴集团控股有限公司 | 读锁操作方法、写锁操作方法及系统 |
-
2018
- 2018-07-10 CN CN201810752077.2A patent/CN110704198B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6795901B1 (en) * | 1999-12-17 | 2004-09-21 | Alliant Techsystems Inc. | Shared memory interface with conventional access and synchronization support |
CN101685406A (zh) * | 2008-09-27 | 2010-03-31 | 国际商业机器公司 | 用于对数据结构的实例进行操作的方法和系统 |
CN102651006A (zh) * | 2011-02-25 | 2012-08-29 | 上海网环信息科技有限公司 | 一种数据库表单记录加锁方法和装置 |
CN104572568A (zh) * | 2013-10-15 | 2015-04-29 | 阿里巴巴集团控股有限公司 | 读锁操作方法、写锁操作方法及系统 |
Non-Patent Citations (1)
Title |
---|
一种检测竞争并自调节的动态读写锁;张恒等;《小型微型计算机系统》;20160915(第09期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110704198A (zh) | 2020-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110704198B (zh) | 数据操作方法、装置、存储介质以及处理器 | |
CN108108286A (zh) | 数据收集方法和装置、服务器、存储介质 | |
KR101871383B1 (ko) | 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템 | |
CN110659151B (zh) | 数据校验方法及装置,存储介质 | |
CN108845877B (zh) | 管理内存的方法、装置和系统 | |
CN111008026B (zh) | 集群管理方法、装置及系统 | |
CN107211003A (zh) | 分布式存储系统及管理元数据的方法 | |
CN112202747A (zh) | 目标设备的绑定方法和装置、存储介质及电子装置 | |
CN111694703B (zh) | 缓存区管理方法、装置和计算机设备 | |
CN110858201B (zh) | 数据处理方法及系统、处理器、存储介质 | |
CN110958287B (zh) | 操作对象数据同步方法、装置及系统 | |
CN110798824A (zh) | 一种电子桌牌控制方法、智能终端及系统 | |
CN107526955B (zh) | 熄屏解锁方法和装置 | |
CN109474683A (zh) | 一种节点配置方法及相关装置 | |
CN112069190B (zh) | 一种分批数据获取方法、装置、设备及介质 | |
CN112600744A (zh) | 权限控制方法和装置、存储介质及电子装置 | |
TWI619031B (zh) | 詮釋資料伺服器、網路裝置及自動資源管理方法 | |
CN111049717A (zh) | 变量采集方法及设备 | |
CN108845613B (zh) | 交互智能平板及其数据处理方和装置 | |
CN109962941B (zh) | 通信方法、装置以及服务器 | |
CN108551429A (zh) | 应用程序的流量控制方法、电子装置及计算机可读存储介质 | |
CN113747423B (zh) | 云手机状态同步方法、装置、设备、存储介质及程序产品 | |
CN115225950A (zh) | 视频的播放控制方法和装置 | |
CN112667579A (zh) | 文件存储方法、装置、设备和存储介质 | |
CN111104412B (zh) | 基于单线程的并发控制方法、装置和系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231129 Address after: Room 1-2-A06, Yungu Park, No. 1008 Dengcai Street, Sandun Town, Xihu District, Hangzhou City, Zhejiang Province Patentee after: Aliyun Computing Co.,Ltd. Address before: Box 847, four, Grand Cayman capital, Cayman Islands, UK Patentee before: ALIBABA GROUP HOLDING Ltd. |
|
TR01 | Transfer of patent right |