起因

文章事情不是发生在最近 1 年,想了解多线程,于是去求教有一位大佬,大佬和我说,多线程就和猫玩毛线球一样。
我花了几顿饭的热量想了下,没理解。近代实践出真知,于是决定找些猫伙伴试试。

开始实验

于是我买了一团毛线给别名灰猫玩,灰猫看到毛线冲了过去,假设是在 “处理毛线”,没多久灰猫把身上团满了毛线,开始喵喵叫,无法进行了。
看来处理不过来,中间解决方案:于是我又抱来一只别号白猫去和协同灰猫一起处理。二只猫对着毛线球开始挠,结果还是缠住了。
看来猫数量不够,回头一看没猫了,中间解决方案:只能陈大猫上了。三只猫加入后,效率高了很多,但结果一样。事故:陈大猫看到二只猫在绕线球,偷偷给他们又缠了点。
说明不同单位的线程不兼容啊,也不能作弊。不知道如何解决饿了,于是打开手机,启动美团点了一份饭外卖,最近搞活动,便宜加香。
间接解决方案:吃饭蓄能后,想到了一个从侧面去看问题本质的关键,假设猫不够,验证可行解决方案:可以降低把毛线的数量,二分一下,毛线数量/2+1 后,继续给二只猫缠着处理,设置了一个时间,根据玩毛线的时间评估是否被缠住。
如果顺序的话,就把毛线在当前长度索引下面接长一段(可以设置规则),新增一个新的中位期望结果,然后验证,根据时间多次采样,最后记录大概多少米长的毛线球,二只猫在测试过程中不会被缠死。

总结

猫玩毛线,缺少 1 个调度猫的 cpu,二只猫在拨动球,很多情况下,在互相争夺控制权,因为有一只猫优先级会比较高点。
不同单位的线程不兼容,线程之间负责的内存区域也应该是隔离,这样就杜绝了其他猫去拿线缠住别的猫,这里可以用安全的方法和设计模式可以改善。
场景虽然是多线程,但是还是多用于软件和硬件系统最终可以支持开多少的问题上,比如几个配搭几个比较合适。

鸣谢

灰猫

白猫

陈大猫


↙↙↙阅读原文可查看相关链接,并与作者交流