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及第二修饰函数s ...
【技术保护点】
一种避免线程阻塞的方法,其特征在于,所述方法包括:为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;对所述公共变量类进行实例化,获取线程本地存储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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。