
为什么多线程编程这样难呢?你有莫得想过这个问题世界杯体育。 一边又一边 周末了,好意思好意思的睡个懒觉起来作念早饭,作念饭其实很浅易,照着菜谱一步步来就行,没什么难度。 在你作念饭时瞬息手机铃声大作,正本是线上出现了故障,其它共事正在排查,需要你协助一下,一边作念饭一边打电话应该也不算太难,你不错的。 梗直你一边排查问题一边作念饭时本来约好未来来维修空调的师父因为相助不开提前一天来了,你不得不一边作念饭一边排查问题一边告诉维修师父哪个空调坏了、问题是啥。。怎样样,是不是驱动派遣不外来了? 这还

为什么多线程编程这样难呢?你有莫得想过这个问题世界杯体育。
一边又一边
周末了,好意思好意思的睡个懒觉起来作念早饭,作念饭其实很浅易,照着菜谱一步步来就行,没什么难度。
在你作念饭时瞬息手机铃声大作,正本是线上出现了故障,其它共事正在排查,需要你协助一下,一边作念饭一边打电话应该也不算太难,你不错的。
梗直你一边排查问题一边作念饭时本来约好未来来维修空调的师父因为相助不开提前一天来了,你不得不一边作念饭一边排查问题一边告诉维修师父哪个空调坏了、问题是啥。。怎样样,是不是驱动派遣不外来了?
这还不算啥,就在这时你约好的同学也到了,一边招待同学一边指引着维修师父一边排查问题一边作念早饭,你是不是一经驱动疯了。
当多线程碰到分享
看到了吧,"多线程"毫不是在编程这个层面很难,多线程自身就很难。
尤其是当多线程遇上分享数据时更是难上加难,对东说念主类来说,同期作念两件互不骚动的事情如故有可能的,一边写代码一边听歌即是,但你不错试试让两个任务分享听的才调,同期听两首歌;概况让两个任务分享大脑的念念考才调,一边解bug一边刷算法,你还能玩忽加好意思瞻念吗?
淌若你试图推演多线程探问分享数据那么你的脑海很可能就像刚才提到的“一边招待同学一边指引这维修师父一边排查问题一边作念早饭”,一团糟。。东说念主类的大脑似乎天生就不是很擅长(天才不在此权术范围),更无谓说因处置分享数据而带来的死锁等问题。
遇事未定量子力学
你的多线程代码可能在99.99%的情况下职责闲居,但在小概率下即是会有问题,这齐不算啥,问题是你该怎样debug呢?
你该怎样调试一个可能独一万分之一出错的体式呢?何况更棒的是,就像测不准旨趣雷同,测量这操作自身居然弗成幸免的骚动了被测量粒子的开放景况,因此产生不细目性。
当你试图用调试器attach上去又概况加一些log时这自身也会更正多线程体式的活动,概况问题就此不再产生,又概况概率变为了十万分之一,从这个角度看多线程和量子力学有不谋而合之妙。
这里的根源在于“可能性的组合爆炸”问题。
由于操作系统的探求、系统中断再加上体式员添加的锁等原因,咱们的体式(线程)老是走走停停,这就导致在体式的“推论空间”上有太多可能,试图去测试每一种可能险些是弗成能的事情,而咱们添加一些log等自身就给本来一经爆炸的组合新增一个维度,导致有的问题至极难复现。
尽管咱们的调试器用IDE等越来越高档,但依然处置不了多线程自身的问题。
性能是个问题
淌若你不怜惜体式性能的话,大不错加上一个很粗犷的锁,但锁也不应该加的过分放飞自我,你能设想为了让北京的某个同学买一册书电商要把所有华北地区的库存锁住吗?
淌若你怜惜肠能的话那么锁的粒度会是个问题,同期在硬件级别你可能需要了解多核cache一致性以及memory ordering等,这些齐不是那么容易融合世界杯体育,更无谓提无锁编程,lock-free等等。