缓存一致性协议也被称为MESI,现在直播软件APP开发一般是多CPU和多核的,很容易出现多个CPU同一时间访问一个变量的情况,而MESI就是为了解决这个变量问题的,保证直播软件APP开发数据一致性的问题。
一、MESI的四种状态
1、M,已修改,代表缓存行里面的数据已经被修改了,后续会写到内存中
2、E,独占,代表该数据只能被直播软件APP开发的CPU或者该核缓存,不存在多个CPU或者多个核同时操作的情况
3、S,共享,代表该数据可以被多个CPU或者多核缓存,存在多个CPU或者多个核同时操作的情况
4、I,已失效,代表该缓存行里面的数据已经失效了,也就是被其他CPU或者核已经修改掉了
二、针对MESI的优化
缓存一致性信息传递是需要时间的,就导致其切换时会产生延迟,当一个缓存被切换状态时其他缓存受到消息完成各自的切换并且发出回应消息,那直播软件APP开发需要等待所有缓存响应完成,可能会出现阻塞,导致各种各样的性能问题和稳定性问题。
解决方法在于:在直播软件APP开发某个CPU修改变量后,会去通知其他用到了该变量的CPU,其他用到了该变量的CPU收到通知后,会将自己的备份数据放到一个失效队列中,然后立刻发送修改的CPU一个通知,等确定其他CPU都收到后,发送的那个就会将数据丢掉。
三、缓存行的伪共享
1、伪共享是什么。首先CPU缓存系统中是以缓存行为单位储存的,目前直播软件APP开发主流的CPU大小是固定的,在多线程情况下,如果需要修改共享同一个缓存行的变量,就会影响到彼此之间的性能
2、如何解决伪共享。给直播软件APP开发加上一个注解的类会自动补齐缓存行,需要注意的是此注解默认是无效的,需要在jvm启动时才会生效
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!