最近表弟始终在找实习,常常会问我一些问题,有些问题在没有经验过实在工作时是真的不好了解的,所以我开了这个【表弟专栏】,专门为找工作的表弟解决一些纳闷。
这篇文章从计算机倒退的角度登程,形容为什么计算机须要划分 “ 主 / 子线程 ” 和 “ 同 / 异步 ”,心愿这个故事你能喜爱。
开天辟地,计算机 ” 老计 ” 诞生
话说几十年前,老计(初代 CPU)诞生了,老计诞生初期帮人们解决了诸多繁琐的计算工作,他能够无休无止地依照人们给的指令进行运算。
就像图中一样,人们产生着各种问题,而后把问题丢入到一个队列中去,老计依照人们丢入的指令按程序进行计算。
但就像当初互联网越来越卷一样,老计工作几年之后,发现要做的事件切实是太多了,有些计算要算完要搞到几十年后了,这可咋办呢?
这时人们认为老计该退休了,换了大计出场,大计的长处是相当卷,计算速度是老计的 N 倍,大大晋升了计算的速度。
事实问题,大计海王进化(主 / 子线程)
大计有一天在诚诚恳恳工作时,被主管拉到了办公室,开始批评大计:
“ 大计啊,我晓得你工作起来很致力,但你有点死板了啊,所有人给你调配的工作你都是按程序操作,导致用户说咱们的产品就像在挤牙膏,一点点挤出来。你能再放慢工作速度吗?不能只靠加班来实现工作啊!”
大计一脸 mmp 像,心想:“我特么要做什么,不还是你给到的指令啊”,但大计有着当代互联网人独特的指标(” 保住这份工 ”),所以大计也只能说:
“ 好的主管,这事我想想方法,今天给你个回答。”
大计这天工作到凌晨 3 点,上班后和总线一起去喝酒,说起了白天被主管叼这件事,总线说:
“ 这事好办啊,我平时给你传的各种指令,优先级不高的你让它不要走同一条门路传输呀,咱们像渣男一样搞个高并发!给每个指令都送去和煦,钓住她们,让她们认为你是专一的男人,实际上你在同时和多人来往。”
大计一听直呼妙计妙计,总线不愧是和各个部门打交道的社交花,把泡妞能力用到工作上间接无缝连接。
之前大计只有一条指令流水线时,他是按走流程,指令 1 解决完了,才解决指令 2,是一个对指令专一的女子。
大计当即画出了这样的指令图:
大计当初能 ” 同时 ” 解决 3 条指令:M_0、A_0 和 B_0,说是 ” 同时 ”,实际上只是大计在这三条指令里频繁切换,M_0 实现 40%,就去招呼下 A_0,A_0 解决完 80% 后,而后再去招呼下 B_0 指令。
也就是说尽管工作时长是肯定的,但给主管一种同时在解决 3 个指令的错觉。就靠着这套海王策略,大计终于实现了刁钻主管的需要。
不急的话,这事能够等等再做(同 / 异步)
随着大计海王能力的扩大,当初最高时能够 ” 同时 ” 和几百个指令妹子约会,曾经是不可被代替的重要角色,当初主管每天看到大计都得磕个头,大计的话语权也越来越大,甚至开始反过来给主管提需要了:
“ 主管啊,你可要晓得我主线程是负责和用户交互的重要线程啊,你每天在主线程丢那么指令,十分影响用户的体验了啊 ”
“ 你有些渲染 UI 的逻辑太频繁了,导致我做了很多无用的渲染,而且渲染逻辑也分重要水平啊,不重要的指令你等我闲暇了再解决啊 ”
主管连连拍板,说好的好的:” 咱们下次增加指令时,会通知你这个指令是否须要立即施行,如果不那么重要能够等你闲暇下来再解决。”
于是乎,同步、异步 的概念诞生了:
之前大计在解决 主线程 里的指令时,因为同一个线程指令是没有优先级的概念的,所以 线程里的指令还是按程序解决的:M_0 -> M_1 -> M_2 -> M_3 -> M_4
但有了 异步 的概念后,假如这里的 指令 M_1 不那么重要,那么大计在解决时是能够把 M_1 放到前面解决的:M_0 -> M_2 -> M_3 -> M_4 -> M_1
小结
本篇【表弟专栏】给大家聊了 主 / 子线程 诞生的必要性,形容了 CPU 海王实质,以及和同 / 异步的区别和关联。对于 主 / 子线程 和 同 / 异步 的问题,大家能够在评论区一起探讨。最初如果大家喜爱这个专题,能够关注我的公众号:冰以东,会继续更新【表弟专栏】,心愿能帮忙大家找到更好的工作。