周五晚上,刘大胖从公司加班回来,在楼下买了一份炒饼丝。进门后,先打开电脑上的虎牙直播,找到一个专门播放周星驰电影的直播间,现在正播放的是唐伯虎点秋香。
这个不错,看个搞笑电影开心开心,大胖心想,边看边大口吃起他那在楼下打包的一份炒饼丝。
大胖是一个java程序员,在公司天天被各种需求搞得焦头烂额,下了班后看个搞笑电影是他最放松的时候。
小子,记着,以后你就是华府的低等下人,9527就是你的终生代号,武状元厉声喝道。从此以后你就留在华府做高级伴读书童,你就叫华胜好了,唐伯虎道,这可不敢当啊夫人,那叫华安好了。。。。。。大胖听着这些经典台词,吃的津津有味。即使这个电影已经看过很多遍了,再看还是能带来快乐。
放松的时候,时间总是过的那么快,大胖把炒饼丝吃完了,电影也看完了,感到有些困,但是看了看表,还不到11点,还不到自己睡觉时间啊。算了,趴桌子上睡一会吧。大胖把电脑睡眠,趴在了他赖以生存的这台机器旁边,CPU的风扇声渐渐停了下来。
唉,我说,醒醒,你干嘛呢,赶紧去干活啊。干什么活啊,大胖心想,周末了。
大胖睁开惺忪的睡眼,突然感觉到有点不对劲,怎么自己的身体,我去,这是什么鬼,大胖看着自己身上一个一个的晶体管,又看看周围的世界,惊呆了。
自己的身上全都是电子元器件,周围的世界也是一片电子的世界。
我说,你干嘛呢,对着自己的程序计数器发什么呆呀,快干活啊,内存里的线程都等不及了。这可不像你的风格啊,你可是我们这儿干活最快的CPU。旁边突然传来一个声音。
大胖听得有点懵,看向旁边对着自己嘟囔的家伙,突然发现,这家伙怎么和自己长的一模一样
你谁呀,你说我是一个CPU?大胖难以置信的问道。
废话,我是小强,你是华安啊。什么叫我说你是一个CPU,你不是CPU你还想是什么,除了我们CPU谁还能拥有这么多寄存器。这里是电子的世界,我们两个是这个世界上负责计算的,没有我们,这里的一切都要停止喽,旁边那个自称小强的家伙骄傲的。
大胖看着周围电子的世界,在看看自己身上的无数个被小强称为寄存器的东西,大胖脑子里突然闪出一个难以置信念头,难不成我穿越了…还穿越到电脑内部来了。。。。
华安,快跟我走,这么多线程等着你呢,你墨迹什么呢?华安听到传来了一个威严的声音。
操作系统老大来找你了吧,快跟他走,去干活吧,他可是我们这里的主宰,他的命令我们必须服从。
大胖不敢怠慢,马上跟着操作系统来到一栋房子前,房子上写着几个大字,就绪车间。
就绪车间,这不是线程进入就绪态,等待执行的地方吗。大胖怎么说也是一个程序员,这点常识还是有的。进入到车间以后,果然有一堆线程在那排队等着。操作系统随手拉过来一个站位比较靠前的线程,对华安说,先执行他,这是一个前台线程,优先执行。
大胖大概浏览了一下这个线程的指令,这个线程是一个用户登录的操作,线程还带来了两个字段:用户名和密码。
我说CPU大哥,辛苦你去数据库中查询一下这个用户名对应的密码,然后验证一下我带来的密码正不正确,这个编号为9527的线程略带奉承的说道。我靠,线程都会说话了,大胖心想。
行了,不用多说,我知道该怎么做,大胖心想,哥是个程序员,简单的登录操作,还用你絮叨,再说你这指令上不都写着呢。
一步步开始执行指令吧,这时候大胖突然发现线程背后的两个“就绪”大字变成了“运行”,大胖知道,这是他开始干活的标志,类似于他上班打卡,从这个线程被操作系统选中,这个状态就变了。
大胖执行指令非常速度极快,先把加载到自己的L1,L2,L3高速缓存中,再交给寄存器,一系列计算,瞬间完成。
突然,下一个指令引起了大胖的注意,经过前期的判空验证后,大胖要去数据库中根据用户名查询一下,看看这个用户名存在不存在,如果不存在。那肯定没法登陆啊,要先去注册。
不过这都跟大胖没关系,现在跟自己有关系的是,要去数据库中查,但是数据库在硬盘上,自己现在在内存中。
大胖向数据库发送了一条访问请求,并附带了一条SQL。
奇怪的是数据库迟迟没有回应,然后就是漫长的等待。。。
华安,你在这干嘛呢,远方突然传来操作系统老大催促的声音。
我等数据库给我响应呢,刚刚我给他发了一个查询请求。
等个屁啊,数据库在硬盘上,硬盘比你慢一百万倍,你在这等他,开玩笑呢。
你现在立马切换到另外一个线程执行指令,快去。
啊,那9527怎么办,我这执行到一半,能走吗?
怎么不能走,你把你执行9527的位置记录下来不就得了。下次回来继续从这次执行的位置继续执行,这个叫线程的上下文。切换到那边之后,可能也是从半路执行,这叫线程的上下文切换。我说你也是个老CPU,这还用我教你吗。操作系统老大明显不太高兴
我说CPU大哥,你不用一直等数据库给你响应,他很墨迹的,干活速度比你慢一百万多倍。如果你有其他事,就先去忙。线程也赶紧附和操作系统老大。果然在这里谁都得看操作系统脸色。
可是这样不是平白无故的增加了工作量,还得保存上下文,还得切换,上下文不用占内存啊,切换不用花时间啊。大胖有点初生牛犊不怕虎,竟然跟操作系统顶起嘴了。
那有什么办法,谁让这家伙的指令要去请求硬盘呢,操作系统白了一眼9527。硬盘这么慢,难道你在这儿干等着啊。你看人家redis,除了偶尔持久化需要访问数据库,99%的场景都是纯内存操作,所以直接设计成单线程。也省的来回切上下文了。没有了上下文切换的额外开销,效率反而比多线程来回切要高。
这时候大胖突然想到自己曾经面试的时候,面试官问过自己一个问题,多线程一定快吗。大胖毫不犹豫的说,是啊。然后面试官就让自己回家等消息了,然后就没有然后了。听操作系统这么一说,大胖好像明白了什么。
离别总是伤心时。我什么时候才能再见到你,大胖问9527。9527答道,等数据库返回了信息,我就会从阻塞状态重新进入就绪状态,在就绪车间等你,到时候我们就有机会见面了。
好吧,那我走了,大胖跟9527告别,然后又去了就绪车间,等操作系统选下一个线程去了这时候大胖注意到9527背后的字变成了阻塞。
9527神情落寞,依依不舍。他并没有把话说完,他知道,这里不只大胖一个CPU,还有一个叫小强,下次来找自己的,就不一定是大胖了。