每日一博 | 并发高?可能是编译优化引发有序性问题
摘要:CPU为了对程序进行优化,会对程序的指令进行重排序,此时程序的执行顺序和代码的编写顺序不一定一致,这就可能会引起有序性问题。 本文分享自华为云社区《【高并发】解密导致并发问题的第三个幕后黑手——有序性问题》,作者:冰 河 。 有序性 有序性是指:按照代码的既定顺序执行。 说的通俗一点,就是代码会按照指定的顺序执行,例如,按照程序编写的顺序执行,先执行第一行代码,再执行第二行代码,然后是第三行代码,以此类推。如下图所示。 指令重排序 编译器或者解释器为了优化程序的执行性能,有时会改变程序的执行顺序。但是,编译器或者解释器对程序的执行顺序进行修改,可能会导致意想不到的问题! 在单线程下,指令重排序可以保证最终执行的结果与程序顺序执行的结果一致,但是在多线程下就会存在问题。 如果发生了指令重排序,则程序可能先执行第一行代码,再执行第三行代码,然后执行第二行代码,如下所示。 例如下面的三行代码。 int x = 1; int y = 2; int z = x + y; CPU发生指令重排序时,能够保证x=1和y = 2这两行代码在z = x + y这行代码的上面,而x = 1和 y...