[发明专利]一种线程间消息传递方法、装置及电子设备在审
申请号: | 201610067778.3 | 申请日: | 2016-01-29 |
公开(公告)号: | CN107025142A | 公开(公告)日: | 2017-08-08 |
发明(设计)人: | 胡士辉 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54 |
代理公司: | 北京同达信恒知识产权代理有限公司11291 | 代理人: | 冯艳莲 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 线程 消息 传递 方法 装置 电子设备 | ||
技术领域
本发明涉及计算机技术领域,尤其涉及一种线程间消息传递方法、装置及电子设备。
背景技术
在多核计算机体系架构中,缓存(cache)一致性是非常棘手的问题。Cache一致性是指cache数据与主存数据一致。详细的说,在采用cache的系统中,同样一个数据可能既存在于cache中,也存在于主存中,两者数据相同则具有一致性,数据不相同就称为不一致。如果不能保证数据的一致性,那么,后续程序的运行就会出现问题。
处理器所能交换的最小存储单元即为一个cache行,或者一个cache块。当两个或两个以上处理内核都要访问同一个cache行的数据时,就会引起处理器进行频繁的cache一致性处理,造成cache读写性能显著下降,这种情况就叫cache伪共享。一种cache伪共享的例子如下:一个消息队列用于内核1和内核2之间的消息(消息可以是生产者写入数据的地址)传递,内核1依次向数组队列中写入数据(即生产者总是在改写“尾队列”字段),内核2依次从数组队列中读取数据(消费者线程总是在改写“队列头”字段),“队列大小”字段会被生产者和消费者线程改写。“尾队列”字段、“队列头”字段和“队列大小”字段处于同一个cache行。由于内核1与内核2要同时读写该cache行,就需要频繁的cache一致性处理,即发生cache伪共享。
发明内容
本发明实施例提供一种线程间消息传递方法、装置及电子设备,用以解决 现有技术中消息队列的消息传递机制会产生cache伪共享的技术问题。
第一方面,本发明实施例提供了一种线程间消息传递方法,包括:
装载器线程获取至少一个环形缓存中的消息;其中,所述至少一个环形缓存中的消息为生产者发布的消息,每个生产者对应一个环形缓存;所述装载器线程运行在电子设备的多核处理器的一个处理内核上;所述装载器线程将所述消息保存至至少一个消息队列中,以使消费者线程从所述至少一个消息队列中与自身对应的消息队列中读取所述消息并处理所述消息;其中,每个消费者线程对应一个消息队列;一个消息仅保存在一个消息队列中。
在本发明实施例中,因为生产者改写的字段在环形缓存中,而消费者线程访问的是消息队列,所以生产者和消费者线程不会访问同一cache行,所以两者之间不存在cache伪共享的问题。同时因为消息队列具有出队机制,所以当某个消息被一个消费者线程读取之后,该消息就出队而不会被其它消费者线程读取到,所以就不会出现消息的重复处理的问题,所以本发明实施例中的方案既可以解决cache伪共享的问题,又可以解决消息重复处理的问题,实现支持多消费者线程,满足业务需求的目的。
结合第一方面,在第一方面的第一种可能的实现方式中,所述装载器线程获取至少一个环形缓存中的消息包括:所述装载器线程依次从所述至少一个环形缓存中获取消息。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述装载器线程将所述消息保存至至少一个消息队列中,包括:所述装载器线程将所述消息组成消息数组;所述装载器线程在所述至少一个消息队列中随机选取消息队列;所述装载器线程将所述消息数组一次推入选取的消息队列中;其中,所述每个消费者线程的能力相同。通过本实施例中的方法,可以成倍的加快消息传递的速度,并且因为每个消费者线程能力相同,所以可以保证每个消息都被准确无误的处理。
结合第一方面,在第一方面的第三种可能的实现方式中,所述装载器线程 获取至少一个环形缓存中的消息,包括:所述装载器线程获取所述至少一个环形缓存中的消息个数;所述装载器线程获取令牌桶中的令牌的数量;其中,所述令牌的数量随着时间的增加而增大;所述令牌的数量的增长速度小于或等于所述消费者线程的最大处理速度;如果所述消息个数小于或等于所述令牌的数量,所述装载器线程则从所述至少一个环形缓存中读取所述消息个数的消息,并从所述令牌桶中取出所述消息个数的令牌;如果所述消息个数大于所述令牌的数量,所述装载器线程则从所述至少一个环形缓存中读取所述令牌的数量对应的消息,并从所述令牌桶中取出全部令牌。通过本实施例中的令牌桶,可以限制消息传递的速度,避免消费者线程处理速度跟不上而造成拥塞现象。
结合第一方面或第一方面的第一种可能的实现方式至第一方面的第三种可能的实现方式中的任意一种,在第一方面的第四种可能的实现方式中,在所述获取至少一个环形缓存中的消息之前,所述方法还包括:获取所述生产者的标识;根据所述标识获取所述生产者对应的环形缓存。
第二方面,本发明实施例提供一种线程间消息传递装置,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610067778.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:站徽(搜房网站)
- 下一篇:水龙头(WLB107-07A)