一种线程间通信方法及相关装置
文献发布时间:2023-06-19 10:32:14
本申请是原申请名称为“一种线程间通信方法及相关装置”的分案申请,原申请的申请日为:2019年4月29日,申请号为:201910356949.8。
技术领域
本发明涉及计算机技术领域,更具体地说,涉及一种线程间通信方法、系统、装置及计算机可读存储介质。
背景技术
在计算机技术中,为了更加有效的利用CPU资源,通常会将不同的业务放置在不同的线程上运行,业务也就是线程之间通过信号进行通信,这就是所谓的面向并发编程。
但是线程之间信息交换量过多,线程内部信息会有相互依赖关系,如图1 所示,线程1中可以获取到数据A,线程2中可以获取到数据B,线程3中可以获取到数据C,当需要获取到数据((AB)C)时,就会有这样的依赖关系,即先要到线程1获取数据A,再用数据A到线程2获取到数据(AB),然后再到线程3中获取到数据((AB)C),然后再反方向将数据((AB)C)经过线程 2返回给线程1,使线程1将数据((AB)C)返回。
由于数据的传递只能在相邻的线程间进行,线程1、线程2、线程3之间就会依赖关系,当有依赖关系时,所有涉及到的线程都需要等待最终数据((AB) C)获取到,并经由自己转发后才能被释放,在等待期间线程就会处于阻塞状态存在一定的资源浪费。
当一个数据所涉及的相互依赖的线程过多时,处于阻塞状态的线程也会更多,而且每个线程阻塞的时间也会更长,因此会带来较大的资源浪费。
因此,如何避免线程并发过程中的资源浪费,是本领域技术人员需要解决的问题。
发明内容
本发明的目的在于提供一种线程间通信方法、系统、装置及计算机可读存储介质,以解决现有技术中线程并发过程中的资源浪费问题。
为实现上述目的,本发明实施例提供了如下技术方案:
一种线程间通信方法,包括:
确定待返回信息包括的子信息、所述子信息所属线程与所述待返回信息对应的所述所属线程之间的依赖关系;
按照所述依赖关系在首线程获取第一子信息,将第一子信息与目标线程的通信信息传入中间线程;其中,所述目标线程为用于返回所述待返回信息的线程;
在所述中间线程获取第二子信息,将所述第一子信息、所述第二子信息与所述目标线程的通信信息传入尾线程,释放所述中间线程中的非目标线程;
在所述尾线程中获取第三子信息,并利用所述目标线程的通信信息建立所述尾线程与所述目标线程的通信连接,以使所述尾线程将包括所述第一子信息、所述第二子信息与所述第三子信息的待返回信息发送至所述目标线程。
其中,所述通信信息包括线程ID。
其中,当所述目标线程为所述中间线程时,所述按照所述依赖关系在首线程获取第一子信息,将第一子信息与目标线程的通信信息传入中间线程之后,还包括:
释放所述首线程。
其中,所述目标线程为所述首线程。
为实现上述目的,本申请还提供了一种线程间通信系统,包括:
确定模块,用于确定待返回信息包括的子信息、所述子信息所属线程与所述待返回信息对应的所述所属线程之间的依赖关系;
第一子信息获取模块,用于按照所述依赖关系在首线程获取第一子信息,将第一子信息与目标线程的通信信息传入中间线程;其中,所述目标线程为用于返回所述待返回信息的线程;
第二子信息获取模块,用于在所述中间线程获取第二子信息,将所述第一子信息、所述第二子信息与所述目标线程的通信信息传入尾线程,释放所述中间线程中的非目标线程;
第三子信息获取模块,用于在所述尾线程中获取第三子信息,并利用所述目标线程的通信信息建立所述尾线程与所述目标线程的通信连接,以使所述尾线程将包括所述第一子信息、所述第二子信息与所述第三子信息的待返回信息发送至所述目标线程。
其中,所述通信信息包括线程ID。
其中,当所述目标线程为所述中间线程时,所述系统还包括:
首线程释放模块,用于所述按照所述依赖关系在首线程获取第一子信息,将第一子信息与目标线程的通信信息传入中间线程之后,释放所述首线程。
其中,所述目标线程为所述首线程。
为实现上述目的,本申请还提供了一种线程间通信装置,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如所述线程间通信方法的步骤。
为实现上述目的,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如所述线程间通信方法的步骤。
通过以上方案可知,本发明提供的一种线程间通信方法,包括:确定待返回信息包括的子信息、所述子信息所属线程与所述待返回信息对应的所述所属线程之间的依赖关系;按照所述依赖关系在首线程获取第一子信息,将第一子信息与目标线程的通信信息传入中间线程;其中,所述目标线程为用于返回所述待返回信息的线程;在所述中间线程获取第二子信息,将所述第一子信息、第二子信息与所述目标线程的通信信息传入尾线程,释放所述中间线程中的非目标线程;在所述尾线程中获取第三子信息,并利用所述目标线程的通信信息建立所述尾线程与所述目标线程的通信连接,以使所述尾线程将包括所述第一子信息、所述第二子信息与所述第三子信息的待返回信息发送至所述目标线程。
由此可见,本申请提供的一种线程间通信方法,首先确定待返回信息包括的子信息、子信息所属线程以及所属线程之间的依赖关系,然后按照该依赖关系依次从首线程、中间线程、尾线程获取相应的子信息,并在线程间传递子信息的过程中传递用于返回待返回信息的目标线程的通信信息,并在当前线程不是目标线程且完成子信息与通信信息的传递时就释放当前线程,当尾线程获取到最终的待返回信息时,即可直接利用通信信息与目标线程建立连接,直接传输待返回信息至目标线程,而其他线程无需等待,在完成子信息与通信信息的传递时就被释放,因此可以避免大量线程的阻塞,减少线程资源的浪费。本申请还提供了一种线程间通信系统、装置及计算机可读存储介质,同样可以实现上述技术效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术线程间通信方法流程图;
图2为本发明实施例公开的一种线程间通信方法流程图;
图3为本发明实施例公开的一种具体的线程间通信方法流程图;
图4为本发明实施例公开的一种线程间通信系统结构示意图;
图5为本发明实施例公开的一种线程间通信装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种线程间通信方法、系统、装置及计算机可读存储介质,以解决现有技术中线程并发过程中的资源浪费问题。
参见图2,本发明实施例提供的一种线程间通信方法,具体包括:
S101,确定待返回信息包括的子信息、所述子信息所属线程与所述待返回信息对应的所述所属线程之间的依赖关系。
首先确定待返回信息,待返回信息也就是需要线程间相互通信得到的最终数据。该待返回信息包括有子信息,每个子信息所属的线程以及线程之间的依赖关系。
例如,待返回信息为((AB)C),待返回信息包括的子信息则为数据A、数据B、数据C。线程1可获取数据A,线程2可获取数据B,线程3可获取数据C,则线程之间的依赖关系为先要到线程1获取数据A,再用数据A到线程2获取到数据(AB),然后再到线程3中获取到数据((AB)C),然后再反方向将数据((AB)C)经过线程2返回给线程1,使线程1将数据((AB)C)返回。
S102,按照所述依赖关系在首线程获取第一子信息,将第一子信息与目标线程的通信信息传入中间线程;其中,所述目标线程为用于返回所述待返回信息的线程。
具体地,按照依赖关系先在首线程获取第一子信息。需要说明的是,首线程即获取第一个子信息的线程,也即整个依赖关系的开端。
首先在首线程中获取第一子信息,然后将第一子信息以及目标线程的通信信息传入中间线程。
需要说明的是,目标线程即用于返回待返回信息的线程,既可以是首线程也可以不是首线程。在本步骤中,需要确定目标线程的通信信息,并与第一信息一起传入中间线程。
在一个具体的实施方式中,当目标线程不是首线程时,如目标线程为中间线程时,所述按照所述依赖关系在首线程获取第一子信息,将第一子信息与目标线程的通信信息传入中间线程之后,还包括:释放所述首线程。即是释放首线程可以避免首线程的阻塞,从而避免线程资源的浪费。
一般情况下,待返回信息从首线程开始获取,也会从首线程返回,因此为了方便待返回信息的返回,在本方案中,优选将首线程作为目标线程。
线程间的通信一般可以线程ID来进行,因此在本方案中,目标线程的通信信息可以是其线程ID。
S103,在所述中间线程获取第二子信息,将所述第一子信息、所述第二子信息与所述目标线程的通信信息传入尾线程,释放所述中间线程中的非目标线程。
具体地,在中间线程获取第二子信息。
需要说明的是,中间线程可以是一个线程也可以是多个线程。当中间线程有多个时,则需要按照依赖关系依次从每个中间线程中获取对应的子信息,然后将当前线程接收到的子信息、从当前线程获取到的子信息以及目标线程的通信信息一起传入到下一个线程中,重复该步骤直到最后一个中间线程。
在中间线程获取到的最终的子信息为第二子信息,将第一子信息、第二子信息与目标线程的通信信息传入依赖关系中对应的最后一个线程,即尾线程,然后释放中间线程中的所有非目标线程。
需要说明的是,由于目标线程可能为中间线程中的一个,而目标线程由于还需要返回待返回数据所以不能被释放,因此,在本步骤是要释放中间线程中的所有非目标线程。
而当中间线程有多个时,具体的释放过程可以是每当有一个中间线程将当前线程接收到的子信息、从当前线程获取到的子信息以及目标线程的通信信息一起传入到下一个线程后,且其不是目标线程,就将当前线程进行释放。
S104,在所述尾线程中获取第三子信息,并利用所述目标线程的通信信息建立所述尾线程与所述目标线程的通信连接,以使所述尾线程将包括所述第一子信息、所述第二子信息与所述第三子信息的待返回信息发送至所述目标线程。
在尾线程中获取到最后的第三子信息后,即获取到了所有的待返回信息,由于在本方案中子信息在线程间传递的同时也携带了目标线程的通信信息,因此在需要使目标线程返回待返回信息时,并不需要按照获取待返回信息时的线程路径反方向返回,而是通过目标线程的通信信息直接与目标线程点对点的连接,将待返回信息发送至目标线程,使目标线程将待返回信息进行返回。
由此可见,本申请实施例提供的一种线程间通信方法,首先确定待返回信息包括的子信息、子信息所属线程以及所属线程之间的依赖关系,然后按照该依赖关系依次从首线程、中间线程、尾线程获取相应的子信息,并在线程间传递子信息的过程中传递用于返回待返回信息的目标线程的通信信息,并在当前线程不是目标线程且完成子信息与通信信息的传递时就释放当前线程,当尾线程获取到最终的待返回信息时,即可直接利用通信信息与目标线程建立连接,直接传输待返回信息至目标线程,而其他线程无需等待,在完成子信息与通信信息的传递时就被释放,因此可以避免大量线程的阻塞,减少线程资源的浪费。
下面对本申请实施例提供的一种具体的线程间通信方法进行介绍,下文描述的一种具体的线程间通信方法与上述实施例可以相互参见。
参见图3,本申请实施例提供的一种具体的线程间通信方法中,首先确定待返回信息为((AB)C),待返回信息包括的子信息则为数据A、数据B、数据C。线程1可获取数据A,线程2可获取数据B,线程3可获取数据C,则线程之间的依赖关系为先要到线程1获取数据A,再用数据A到线程2获取到数据 (AB),然后再到线程3中获取到数据((AB)C),然后再反方向将数据 ((AB)C)经过线程2返回给线程1,使线程1将数据((AB)C)返回。
本方案中,目标线程位即线程1,首先按照依赖关系在线程1中获取数据 A,然后将线程1的线程ID、数据A均传递至线程2;在线程2中获取数据B,并将数据(AB)、线程1的线程ID均传递至线程3,将线程2释放;线程3 中获取数据C,得到待返回数据((AB)C),线程3利用线程1的线程ID 与线程1连接,直接将待返回数据((AB)C)传递至线程1,使线程1将待返回数据返回。
下面对本申请实施例提供的一种线程间通信系统进行介绍,下文描述的一种线程间通信系统与上述任一实施例可以相互参照。
参见图4,本申请实施例提供的一种线程间通信系统,具体包括:
确定模块201,用于确定待返回信息包括的子信息、所述子信息所属线程与所述待返回信息对应的所述所属线程之间的依赖关系。
第一子信息获取模块202,用于按照所述依赖关系在首线程获取第一子信息,将第一子信息与目标线程的通信信息传入中间线程;其中,所述目标线程为用于返回所述待返回信息的线程。
第二子信息获取模块203,用于在所述中间线程获取第二子信息,将所述第一子信息、第二子信息与所述目标线程的通信信息传入尾线程,释放所述中间线程中的非目标线程。
第三子信息获取模块204,用于在所述尾线程中获取第三子信息,并利用所述目标线程的通信信息建立所述尾线程与所述目标线程的通信连接,以使所述尾线程将包括所述第一子信息、所述第二子信息与所述第三子信息的待返回信息发送至所述目标线程。
在一个具体的实施方式中,所述通信信息包括线程ID。
在一个具体的实施方式中,当所述目标线程为所述中间线程时,所述系统还包括:
首线程释放模块,用于所述按照所述依赖关系在首线程获取第一子信息,将第一子信息与目标线程的通信信息传入中间线程之后,释放所述首线程。
在一个具体的实施方式中,所述目标线程为所述首线程。
本实施例的线程间通信系统用于实现前述的线程间通信方法,因此线程间通信系统中的具体实施方式可见前文中的线程间通信方法的实施例部分,例如,确定模块201,第一子信息获取模块202,第二子信息获取模块203,第三子信息获取模块204,分别用于实现上述线程间通信方法中步骤S101, S102,S103和S104,所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。
本申请还提供了一种线程间通信装置,参见图5,本发明实施例提供的一种线程间通信装置的结构图,如图5所示,包括:
存储器100,用于存储计算机程序;
处理器200,用于执行所述计算机程序时可以实现上述实施例所提供的步骤。
具体的,存储器100包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机可读指令,该内存储器为非易失性存储介质中的操作系统和计算机可读指令的运行提供环境。处理器200为线程间通信装置提供计算和控制能力,可以实现上述任一线程间通信方法实施例所提供的步骤。
在上述实施例的基础上,作为优选实施方式,所述线程间通信装置还包括:
输入接口300,用于获取外部导入的计算机程序、参数和指令,经处理器控制保存至存储器中。该输入接口300可以与输入装置相连,接收用户手动输入的参数或指令。该输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板,也可以是键盘、触控板或鼠标等。
显示单元400,用于显示处理器发送的数据。该显示单元400可以为PC 机上的显示屏、液晶显示屏或者电子墨水显示屏等。
网络端口500,用于与外部各终端设备进行通信连接。该通信连接所采用的通信技术可以为有线通信技术或无线通信技术,如移动高清链接技术 (MHL)、通用串行总线(USB)、高清多媒体接口(HDMI)、无线保真技术(WiFi)、蓝牙通信技术、低功耗蓝牙通信技术、基于IEEE802.11s的通信技术等。
本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
- 一种线程间通信方法及相关装置
- 一种线程间通信方法及相关装置