一种多线程共享内存方法及装置与流程

文档序号:36775474发布日期:2024-01-23 11:45阅读:20来源:国知局
一种多线程共享内存方法及装置与流程

本发明涉及多线程通信,尤其涉及一种多线程共享内存方法及装置。


背景技术:

1、传统的javascript运行在单线程环境中,无法并发处理大量数据。随着web应用程序的发展,对实时性和高并发性能的需求不断增加,多线程技术成为必不可少的手段。

2、在多线程处理时,最常见的问题是如何实现线程同步和协作。传统的技术方案需要在不同的线程之间进行数据拷贝,主线程通过postmessage方法向工作线程发送消息,工作线程通过onmessage方法接收并处理消息。通过消息队列,工作线程可以异步地执行javascript代码,并在需要时通过postmessage方法返回处理结果给主线程。这种方案避免了不同线程之间共享内存的安全隐患,同时也实现了线程之间的异步通信和数据传递。但考虑到,现有的基于postmessage和onmessage方法的技术方案在同步数据时,需要先将数据序列化,然后通过数据拷贝同步到其它线程。因此,在处理大量数据时,线程间需要频繁地进行数据序列化与拷贝,从而导致cpu开销大,容易出现性能瓶颈。


技术实现思路

1、鉴于此,本发明实施例提供了一种多线程共享内存方法及装置,以消除或改善现有技术中存在的一个或更多个缺陷,解决现有多线程处理方案在处理大量数据时,需要频繁进行数据序列化与拷贝,从而导致cpu开销大,容易出现性能瓶颈的问题。

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、进一步的,共享内存只能被网络工作线程(web worker)使用,彼此之间独立,可以保证线程间对共享内存的访问安全,在保证高效的并发处理能力的同时,不会出现竞争等并发错误,使得线程间的共享内存更为安全,避免数据异常和运行错误等问题。

28、本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在说明书以及附图中具体指出的结构实现到并获得。

29、本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。



技术特征:

1.一种多线程共享内存方法,其特征在于,所述方法在主线程和多个工作线程上执行,包括以下步骤:

2.根据权利要求1所述的多线程共享内存方法,其特征在于,唤醒一个等待中的工作线程,以写入新的计算结果,还包括:

3.根据权利要求1所述的多线程共享内存方法,其特征在于,唤醒一个等待中的工作线程,以读取新的源数据,还包括:

4.根据权利要求1所述的多线程共享内存方法,其特征在于,所述主线程创建共享内存,并将所述共享内存分配给多个工作线程,在所述工作线程中,所述方法还包括:

5.根据权利要求4所述的多线程共享内存方法,其特征在于,检查所述共享内存中是否有可读取的源数据;若没有可读取的源数据,则被挂起,等待被唤醒。

6.根据权利要求4所述的多线程共享内存方法,其特征在于,检查所述共享内存中是否有可写入的计算结果;若没有可读取的计算结果,则被挂起,等待被唤醒。

7.根据权利要求1所述的多线程共享内存方法,其特征在于,采用二元锁算法对所述共享内存实现加锁和解锁操作。

8.一种多线程共享内存装置,包括处理器和存储器,其特征在于,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如权利要求1至7中任一项所述方法的步骤。

9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至7中任一项所述方法的步骤。


技术总结
本发明提供一种多线程共享内存方法及装置,主线程创建共享内存并分配给多个工作线程;在主线程空闲时间时,对共享内存尝试加锁;当加锁成功时,检查共享内存中是否有可读取的计算结果;若有,则读取计算结果,将共享内存的状态数据更新为无计算结果数据,并唤醒一个等待中的工作线程,写入新的计算结果;若无,检查共享内存中是否有可写入的源数据;若有可写入的源数据,则写入源数据,将共享内存的状态数据更新为有源数据,并唤醒一个等待中的工作线程,读取新的源数据;对共享内存解锁,并循环上述步骤。本发明方法能够让不同线程直接共享内存空间,避免频繁地数据拷贝和同步操作,降低线程间的通信和同步开销。

技术研发人员:何晓楠
受保护的技术使用者:北京恺望数据科技有限公司
技术研发日:
技术公布日:2024/1/22
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1