一种避免线程阻塞的方法、装置及计算机设备制造方法及图纸

技术编号:17363528 阅读:23 留言:0更新日期:2018-02-28 13:29
本发明专利技术实施例提供一种避免线程阻塞的方法、装置及计算机设备,方法包括:为各生产者线程建立相应的公共变量类,公共变量类中包含两个存储器;对公共变量类进行实例化,获取TLS公共变量,并将TLS公共变量存储至预先建立的消费者变量列表中;控制各生产者线程利用相应的TLS公共变量进行写数据;控制消费者线程利用消费者变量列表中所述TLS公共变量进行读取数据;这样就可保证始终只有两个线程发生互斥访问;而由于公共变量类中包含两个存储器,因此可以在两个存储器中分别进行读写操作,这样生产者线程就无需等待消费者线程取数据完毕之后再进行写数据操作,进而避免了生产者线程阻塞,进而提高了程序性能。

A method, device, and computer device to avoid thread blocking

The embodiment of the invention provides a method to avoid, thread blocking device and computer equipment, including: the establishment of a public variable corresponding class for each thread contains two memory, a public variable class to instantiate variables; public class TLS public access variables, and store the TLS to pre established consumer public variables variable list; control the producer thread using TLS public variables corresponding to write data; control the consumer thread to use consumer variable in the list of the TLS public variable read data; so as to ensure always only two threads have exclusive access; and because the memory contains two public variables class, so it can be in two the memory read and write operations separately, so there is no need to wait for the thread to the consumer thread after fetching data into The operation of data is written, which avoids the blockage of the producer thread, and thus improves the performance of the program.

【技术实现步骤摘要】
一种避免线程阻塞的方法、装置及计算机设备
本专利技术属于互联网直播
,尤其涉及一种避免线程阻塞的方法、装置及计算机设备。
技术介绍
在直播平台的开发过程中,经常会进行消息处理。在消息处理时,一般会到生产者消费者模式,即使用多个线程获取数据(即“生产者线程”),一个线程从生产者产生的数据块中取出然后处理数据(“消费者线程”)。在这种模式下,必然会碰到的问题是多线程对一个公共变量的互斥读写。并且当线程增多时,易发生阻塞,影响程序性能。
技术实现思路
针对现有技术存在的问题,本专利技术实施例提供了一种避免线程阻塞的方法、装置及计算机设备,用于解决现有技术中当利用线程对消息进行处理时,当线程增多时导致线程易发生堵塞,进而影响程序性能的技术问题。本专利技术实施例提供一种避免线程阻塞的方法,所述方法包括:为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;对所述公共变量类进行实例化,获取线程本地存储(TLS,ThreadLocalStorage)公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;控制各生产者线程利用相应的所述TLS公共变量进行写数据;控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据。上述方案中,所述公共变量类中还包括:成员变量及加锁临界变量。上述方案中,所述为各生产者线程建立相应的公共变量类,包括:创建所述公共变量类的写数据函数;创建所述公共变量类的取数据函数。上述方案中,所述对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,包括:利用第一修饰函数ThreadStatic及第二修饰函数static依次对所述公共变量类进行修饰,获取修饰实例;将所述修饰实例赋值至所述TLS变量,形成所述TLS公共变量。上述方案中,所述控制各生产者线程利用相应的所述TLS公共变量进行写数据,包括:获取所述成员变量的数据类型标识;将所述数据类型标识分别与两个所述存储器的存储标识进行比较,确定第一目标存储器;所述第一目标存储器为存储标识与数据类型标识一致的存储器;利用写数据函数将待写数据写入所述第一目标存储器中。上述方案中,所述利用写数据函数将所述待写数据写入所述目标存储器中时,利用所述加锁临界变量对写数据过程进行加锁操作。上述方案中,所述控制消费者线程利用所述消费者变量列表中所述TLS公共变量进行读取数据,包括:对所述成员变量进行加锁,将所述成员变量的数据类型标识进行翻转;根据翻转后的成员变量的数据类型标识确定第二目标存储器,所述第二目标存储器为存储标识与翻转后的数据类型标识一致的存储器;利用取数据函数从所述第二目标存储器中读取数据;其中,所述第二目标存储器与第一目标存储器不同。本专利技术实施例还提供一种避免线程阻塞的装置,所述装置包括:建立单元,用于为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;获取单元,用于对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;第一控制单元,用于控制各生产者线程利用相应的所述TLS公共变量进行写数据;第二控制单元,用于控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据。本专利技术实施例还一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现以下步骤:为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;控制各生产者线程利用相应的所述TLS公共变量进行写数据;控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据。本专利技术实施例还提供一种避免线程阻塞的计算机设备,包括:至少一个处理器;以及与所述处理器通信连接的至少一个存储器,其中,所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如上述任一所述的方法。本专利技术实施例提供一种避免线程阻塞的方法、装置及计算机设备,所述方法包括:为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;控制各生产者线程利用相应的所述TLS公共变量进行写数据;控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据;如此,为每个生产者线程建立一个公共变量类,这样就可保证始终只有两个线程发生互斥访问;而在发生互斥访问时,由于公共变量类中包含两个存储器,因此可以在两个存储器中分别进行读写操作,这样生产者线程就无需等待消费者线程取数据完毕之后再进行写数据操作,进而避免了生产者线程阻塞,提高了程序的吞吐能力,提高了程序性能。附图说明图1为本专利技术实施例一提供的避免线程阻塞的方法流程示意图;图2为本专利技术实施例二提供的避免线程阻塞的装置结构示意图;图3为本专利技术实施例三提供的避免线程阻塞的计算机设备结构示意图。具体实施方式为了解决现有技术中当利用线程对消息进行处理时,当生产者线程增多时导致线程易发生堵塞,进而影响程序性能的技术问题,本专利技术实施例提供了一种避免线程阻塞的方法、装置及计算机设备,所述方法包括:为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;控制各生产者线程利用相应的所述TLS公共变量进行写数据;控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据。下面通过附图及具体实施例对本专利技术的技术方案做进一步的详细说明。实施例一本实施例提供一种避免线程阻塞的方法,如图1所示,所述方法包括:S101,为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;为了避免多个生产者线程需要在向同一个数据块进行写数据操作,需要等待,导致生产者线程堵塞,本步骤中为各生产者线程建立相应的公共变量类ProducerData,使得每个生产者线程都对应一个公共变量类ProducerData。首先定义公共变量类ProducerData,所述公共变量类ProducerData包含两个存储器,可以为DataA和DataB;还包括成员变量boolflag及加锁临界变量Objectobj;所述bool为一个数据类型,所述flag为数据类型标识,所述数据类型包括:True,简称T;及Flase,简称F。然后,创建所述公共变量类ProducerData的写数据函数PushData(Td),以及所述公共变量类ProducerData的取数据函数PopData()。所述写数据函数PushData(Td)将被生产者线程调用,用来向存储器中写入数据。创建所述公共变量类ProducerData的取数据函数,所述取数据函数PopData()将被消费者线程调用,用来读取存储器中的数据。S102,对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;本步骤中,公共变量类ProducerData建立好之后,对所述公共变量类本文档来自技高网...
一种避免线程阻塞的方法、装置及计算机设备

【技术保护点】
一种避免线程阻塞的方法,其特征在于,所述方法包括:为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;控制各生产者线程利用相应的所述TLS公共变量进行写数据;控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据。

【技术特征摘要】
1.一种避免线程阻塞的方法,其特征在于,所述方法包括:为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;控制各生产者线程利用相应的所述TLS公共变量进行写数据;控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据。2.如权利要求1所述的方法,其特征在于,所述公共变量类中还包括:成员变量及加锁临界变量。3.如权利要求1所述的方法,其特征在于,所述为各生产者线程建立相应的公共变量类,包括:创建所述公共变量类的写数据函数;创建所述公共变量类的取数据函数。4.如权利要求1所述的方法,其特征在于,所述对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,包括:利用第一修饰函数ThreadStatic及第二修饰函数static依次对所述公共变量类进行修饰,获取修饰实例;将所述修饰实例赋值至所述TLS变量,形成所述TLS公共变量。5.如权利要求2所述的方法,其特征在于,所述控制各生产者线程利用相应的所述TLS公共变量进行写数据,包括:获取所述成员变量的数据类型标识;将所述数据类型标识分别与两个所述存储器的存储标识进行比较,确定第一目标存储器;所述第一目标存储器为存储标识与数据类型标识一致的存储器;利用写数据函数将待写数据写入所述第一目标存储器中。6.如权利要求5所述的方法,其特征在于,所述利用写数据函数将所述待写数据写入所述目标存储器中时,利用所述加锁临界变量对写数据过程进行加锁操作。7.如权利要求2所述的方法,其特征在于,所述控制消费者线...

【专利技术属性】
技术研发人员:刘吉林陈少杰张文明
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1