本技术涉及内存管理,特别是涉及一种共享内存申请方法、装置、设备和计算机程序产品。
背景技术:
1、目前,使用共享内存是最快的进程间传输方式,一般采用加锁机制满足被多个线程同时使用的共享内存资源。
2、但是加锁机制会导致线程因多个线程访问系统底层资源而陷入内核态等待,从而使得效率降低。
技术实现思路
1、基于此,有必要针对上述技术问题,提供一种能够提高效率的共享内存申请方法、装置、设备和计算机程序产品。
2、第一方面,本技术提供一种共享内存申请方法,所述方法包括:
3、获取线程的通信数据的大小;
4、在所述线程已分配独立的共享内存的情况下,获取所述独立的共享内存的大小;
5、在所述独立的共享内存的大小小于所述通信数据的大小时,获取预先配置的各类型存储空间的大小;
6、基于所述通信数据的大小以及各所述类型存储空间的大小,为所述通信数据分配对应的类型存储空间。
7、在其中一个实施例中,所述获取线程的通信数据的大小之后,还包括:
8、在所述线程未分配独立的共享内存的情况下,为所述线程申请独立的共享内存;
9、在所述独立的共享内存申请成功的情况下,为所述线程分配跨进程同步对象,并继续执行获取所述独立的共享内存的大小的步骤。
10、在其中一个实施例中,所述方法还包括:
11、在所述独立的共享内存的大小大于或等于所述通信数据的大小时,将所述通信数据写入所述独立的共享内存,并释放所述跨进程同步对象,其中所述跨进程同步对象用于通知所述通信数据的接收方访问所述独立的共享内存以获取所述通信数据。
12、在其中一个实施例中,所述方法还包括:
13、在所述线程结束时,释放已申请的所述独立的共享内存。
14、在其中一个实施例中,所述类型存储空间包括块管理的共享内存区、加锁传输的共享内存区、环形缓冲共享内存区以及超出所述共享内存限制的文件传输空间中的至少一种。
15、在其中一个实施例中,各所述类型存储空间具有优先级,且各所述类型存储空间的优先级由高到低为:块管理的共享内存区、加锁传输的共享内存区、环形缓冲共享内存区、超出所述共享内存限制的文件传输空间;所述基于所述通信数据的大小以及各所述类型存储空间的大小,为所述通信数据分配对应的类型存储空间,包括:
16、按照所述优先级依次向对应的所述类型存储空间进行空间申请,以为所述通信数据分配对应的类型存储空间。
17、在其中一个实施例中,所述基于所述通信数据的大小以及各所述类型存储空间的大小,为所述通信数据分配对应的类型存储空间,包括:
18、在所述块管理的共享内存区的大小大于或等于基于所述通信数据的大小时,查询所述块管理的共享内存区对应的可写块列表;
19、在基于所述可写块列表确定所述块管理的共享内存区存在可写块的情况下,将所述可写块作为所述通信数据对应的共享内存。
20、在其中一个实施例中,所述查询所述块管理的共享内存区对应的可写块列表之前,还包括:
21、确定当前向所述块管理的共享内存区申请可写块的线程,并通过原子计数方式为各所述线程分配对应的第一排队标识;
22、在基于所述线程的第一排队标识,确定开始为所述线程分配所述块管理的共享内存区的情况下,继续执行查询所述块管理的共享内存区对应的可写块列表的步骤。
23、在其中一个实施例中,所述方法还包括:
24、在基于所述可写块列表确定所述块管理的共享内存区不存在可写块的情况下,递增所述线程对应的查询次数;
25、所述查询所述块管理的共享内存区对应的可写块列表之前,还包括:
26、在所述查询次数小于或等于查询次数阈值的情况下,继续执行查询所述块管理的共享内存区对应的可写块列表的步骤;
27、在所述查询次数大于所述查询次数阈值的情况下,向下一所述类型存储空间申请所述通信数据对应的类型存储空间。
28、在其中一个实施例中,所述块管理的共享内存区中每个存储块包括状态标志位;所述方法还包括:
29、在基于所述可写块列表确定所述块管理的共享内存区不存在可写块的情况下,基于各所述存储块的所述状态标志位刷新所述可写块列表。
30、在其中一个实施例中,所述基于所述通信数据的大小以及各所述类型存储空间的大小,为所述通信数据分配对应的存储空间,包括:
31、在所述环形缓冲共享内存区的大小大于或等于所述通信数据的大小时,将所述通信数据以任务形式发送至后台发送线程,所述后台发送线程将所述通信数据写入所述环形缓冲共享内存区。
32、在其中一个实施例中,所述将所述通信数据以任务形式发送至后台发送线程之前,还包括:
33、通过原子计数的方式为各所述线程分配对应的第二排队标识;
34、在基于所述线程的第二排队标识,确定开始为所述线程分配所述环形缓冲共享内存区的情况下,继续执行将所述通信数据以任务形式发送至后台发送线程的步骤。
35、在其中一个实施例中,所述方法还包括:
36、获取所述通信数据的存储信息,并将所述存储信息存储至所述独立的共享内存,所述存储信息用于指示所述通信数据的接收方确定所述通信数据的存储位置。
37、第二方面,本技术还提供一种共享内存申请装置,所述装置包括:
38、通信数据大小获取模块,用于获取线程的通信数据的大小;
39、第一分配模块,用于在所述线程已分配独立的共享内存的情况下,获取所述独立的共享内存的大小;
40、存储空间大小获取模块,用于在所述独立的共享内存的大小小于所述通信数据的大小时,获取预先配置的各类型存储空间的大小;
41、第二分配模块,用于基于所述通信数据的大小以及各所述类型存储空间的大小,为所述通信数据分配对应的类型存储空间。
42、第三方面,本技术还提供一种共享内存申请设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述的任意一个实施例中的方法的步骤。
43、第四方面,本技术还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的任意一个实施例中的方法的步骤。
44、第五方面,本技术还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述的任意一个实施例中的方法的步骤。
45、上述共享内存申请方法、装置、设备和计算机程序产品,获取线程的通信数据的大小;在所述线程已分配独立的共享内存的情况下,获取所述独立的共享内存的大小,这样每个发起通信的线程均拥有一块独立的内存区域,因此不会在运行时引发线程竞争,且在独立的共享内存的大小小于所述通信数据的大小时,获取预先配置的各类型存储空间的大小;基于所述通信数据的大小以及各所述类型存储空间的大小,为所述通信数据分配对应的类型存储空间,这样可以解决竞争冲突带来的性能损失,提高处理效率。
1.一种共享内存申请方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述获取线程的通信数据的大小之后,还包括:
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述方法还包括:
5.根据权利要求1所述的方法,其特征在于,所述类型存储空间包括块管理的共享内存区、加锁传输的共享内存区、环形缓冲共享内存区以及超出所述共享内存限制的文件传输空间中的至少一种。
6.根据权利要求5所述的方法,其特征在于,各所述类型存储空间具有优先级,且各所述类型存储空间的优先级由高到低为:块管理的共享内存区、加锁传输的共享内存区、环形缓冲共享内存区、超出所述共享内存限制的文件传输空间;所述基于所述通信数据的大小以及各所述类型存储空间的大小,为所述通信数据分配对应的类型存储空间,包括:
7.根据权利要求5所述的方法,其特征在于,所述基于所述通信数据的大小以及各所述类型存储空间的大小,为所述通信数据分配对应的类型存储空间,包括:
8.根据权利要求7所述的方法,其特征在于,所述查询所述块管理的共享内存区对应的可写块列表之前,还包括:
9.根据权利要求7所述的方法,其特征在于,所述方法还包括:
10.根据权利要求7所述的方法,其特征在于,所述块管理的共享内存区中每个存储块包括状态标志位;所述方法还包括:
11.根据权利要求5所述的方法,其特征在于,所述基于所述通信数据的大小以及各所述类型存储空间的大小,为所述通信数据分配对应的存储空间,包括:
12.根据权利要求11所述的方法,其特征在于,所述将所述通信数据以任务形式发送至后台发送线程之前,还包括:
13.根据权利要求1至3任意一项所述的方法,其特征在于,所述方法还包括:
14.一种共享内存申请装置,其特征在于,所述装置包括:
15.一种共享内存申请设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至13中任一项所述的方法的步骤。
16.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至13中任一项所述的方法的步骤。