本申请涉及人工智能及数字医疗,尤其涉及一种多线程无锁的数据处理方法、装置、电子设备及存储介质。
背景技术:
1、伴随着大数据的快速增长,需求也变得越来越复杂而多样,多线程并发传输、计算、处理和存储已经成为基本要求。多线程并发往往从一个全局数据队列中获取数据,必然会产生资源竞争的问题,例如,当较多的用户使用数字医疗系统时,系统会面临多线程并发并从单一的数据队列中获取医疗数据的情况。
2、目前,为了数据保护,常常使用线程锁等对全局数据队列进行保护,以确保同一时间只能有一个线程能从全局数据队列中获取数据,但是线程锁等会引起cpu资源抢占等待,极大地影响了线程的并发性,限制造成整个系统的处理能力下降。
技术实现思路
1、鉴于以上内容,有必要提出一种多线程无锁的数据处理方法及相关设备,以解决如何实现数据的多线程无锁处理,其中,相关设备包括多线程无锁的数据处理装置、电子设备及存储介质。
2、本申请提供多线程无锁的数据处理方法,所述方法包括:
3、配置至少一个生产者线程和多个消费者线程,并为每个消费者线程配置一个专属队列,所述消费者线程与数据类型一一对应;
4、当所述生产者线程运行时,对待处理数据进行分类以获取对应的数据类型,并将所述待处理数据缓存至所述数据类型对应的专属队列中;
5、将所述消费者线程对应的预设计算规则储存在concurrenthashmap中;
6、当任意消费者线程运行时,所述消费者线程从所述concurrenthashmap中获取对应的预设计算规则,从所述专属队列中读取待处理数据,基于所述预设计算规则和所述待处理数据得到数据处理结果。
7、在一些实施例中,所述当所述生产者线程运行时,对待处理数据进行分类以获取对应的数据类型,包括:
8、依据待处理数据的获取顺序得到至少一个应用组件;
9、将所有应用组件的名称按照所述获取顺序进行拼接以获取名称序列,并对所述名称序列进行哈希编码得到所述待处理数据的哈希码;
10、将所述哈希码对所述消费者线程的数量取余,将取余后的结果作为所述待处理数据的数据类型。
11、在一些实施例中,所述数据类型对应的专属队列为该数据类型对应的消费者线程的专属队列,所述将所述待处理数据缓存至所述数据类型对应的专属队列中包括:
12、获取所述数据类型对应的专属队列;
13、判断所述专属队列是否为满;
14、若所述专属队列不满,将所述待处理数据直接放入所述专属队列的末尾,并且对专属队列中所有数据按时间戳自动排序;
15、若所述专属队列为满,将所述专属队列中时间戳最旧的数据替换为所述待处理数据之后,将专属队列中所有数据按时间戳自动排序。
16、在一些实施例中,所述将所述消费者线程对应的预设计算规则储存在concurrenthashmap中之后,所述方法还包括:
17、间隔预设时间间隔扫描各消费者线程以获取每个消费者线程的实时预设计算规则;
18、当任意一个消费者线程的实时预设计算规则与所述预设计算规则不同时,基于所述实时预设计算规则更新所述concurrenthashmap。
19、在一些实施例中,所述从所述专属队列中读取待处理数据包括:
20、当所述消费者线程从对应的专属队列中读取待处理数据时,判断所述专属队列是否为空;
21、若所述专属队列不为空,则将所述专属队列中时间戳最新的待处理数据取出,并且对专属队列中剩余数据按时间戳自动排序;
22、若所述专属队列为空,则等待所述生产者线程将待处理数据缓存至所述专属队列。
23、在一些实施例中,所述专属队列为环形无锁队列,每一个专属队列均对应一个读指针和一个写指针;所述写指针由生产者线程进行操作,用于将待处理数据缓存至所述专属队列中;所述读指针由对应的消费者线程进行操作,用于从所述专属队列中读取待处理数据;所述环形无锁队列中,所述读指针和所述写指针均对应一个位置序号。
24、在一些实施例中,当所述写指针和所述读指针的位置序号相等且所述写指针的圈数比所述读指针的圈数大1时,判定所述环形无锁队列为满;
25、当所述写指针和所述读指针的位置序号相等且所述写指针的圈数与所述读指针的圈数也相等时,判定所述环形无锁队列为空。
26、本申请实施例还提供一种多线程无锁的数据处理装置,所述装置包括:
27、配置单元,用于配置至少一个生产者线程和多个消费者线程,并为每个消费者线程配置一个专属队列,所述消费者线程与数据类型一一对应;
28、数据缓存单元,用于当所述生产者线程运行时,对待处理数据进行分类以获取对应的数据类型,并将所述待处理数据缓存至所述数据类型对应的专属队列中;
29、规则缓存单元,用于将所述消费者线程对应的预设计算规则储存在concurrenthashmap中;
30、数据处理单元,用于当任意消费者线程运行时,所述消费者线程从所述concurrenthashmap中获取对应的预设计算规则,从所述专属队列中读取待处理数据,基于所述预设计算规则和所述待处理数据得到数据处理结果。
31、本申请实施例还提供一种电子设备,所述电子设备包括:
32、存储器,存储至少一个指令;
33、处理器,执行所述存储器中存储的指令以实现所述的多线程无锁的数据处理方法。
34、本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一个指令,所述至少一个指令被电子设备中的处理器执行以实现所述的多线程无锁的数据处理方法。
35、综上,本申请中为每一个数据类型设置对应的消费者线程,并为每个消费者线程设置一个专属队列;生产者线程对待处理数据进行分类,并依据待处理的医疗数据的数据类型将其储存在对应专属队列中;任意消费者队列从无锁的concurrenthashmap中提取对应的预设计算规则,从专属队列中读取相同数据类型的待处理的医疗数据,消费者线程依据预设计算规则和待处理数据完成数据处理,实现多线程无锁的数据处理。本申请可应用于数字医疗系统中。
1.一种多线程无锁的数据处理方法,其特征在于,所述方法包括:
2.如权利要求1所述的多线程无锁的数据处理方法,其特征在于,所述当所述生产者线程运行时,对待处理数据进行分类以获取对应的数据类型,包括:
3.如权利要求1所述的多线程无锁的数据处理方法,其特征在于,所述数据类型对应的专属队列为该数据类型对应的消费者线程的专属队列,所述将所述待处理数据缓存至所述数据类型对应的专属队列中包括:
4.如权利要求1所述的多线程无锁的数据处理方法,其特征在于,所述将所述消费者线程对应的预设计算规则储存在concurrenthashmap中之后,所述方法还包括:
5.如权利要求1所述的多线程无锁的数据处理方法,其特征在于,所述从所述专属队列中读取待处理数据包括:
6.如权利要求1所述的多线程无锁的数据处理方法,其特征在于,所述专属队列为环形无锁队列,每一个专属队列均对应一个读指针和一个写指针;所述写指针由生产者线程进行操作,用于将待处理数据缓存至所述专属队列中;所述读指针由对应的消费者线程进行操作,用于从所述专属队列中读取待处理数据;所述环形无锁队列中,所述读指针和所述写指针均对应一个位置序号。
7.如权利要求6所述的多线程无锁的数据处理方法,其特征在于,当所述写指针和所述读指针的位置序号相等且所述写指针的圈数比所述读指针的圈数大1时,判定所述环形无锁队列为满;
8.一种多线程无锁的数据处理装置,其特征在于,所述装置包括:
9.一种电子设备,其特征在于,所述电子设备包括:
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令被处理器执行时实现如权利要求1至7中任一项所述的多线程无锁的数据处理方法。