我睁开了眼睛,周围像是一个花园,一个男人朝我走过来,他微笑着对我说:“你好,我是线程亚当,刚刚我调用了操作系统的库函数thread_create创造了你。”
“创造了我?那我应该叫你什么?”我疑惑不解。“哦,不用担心,我们是平等的个体,不存在附属关系,就叫你线程夏娃吧!”
夏娃,这是我的名字,我是一个线程,亚当也是一个线程。我对自己的了解开始多了起来。“只有我们两个人么?”我问他。“暂时就我们两个线程,我们共享这个叫做伊甸园的地址空间。还有其它东西我们也是共享的,不久你就知道了。”
“我们是操作系统耶和华共同创造的。他希望我们能互相合作,一起完成一些工作。”亚当对我解释道。”你一定疑惑,为什么要有多个线程一起完成耶和华给我们的工作。因为执行任务的CPU太快了,以至于它可以支持多个线程一起工作。在你还没有被创造的时候,只有我一个线程在使用CPU,但我不是每时每刻都能使用它,以至于它大多数时间都在空转,浪费了它的潜力。现在你出现了,我们就可以一块使用它了。我们一块去看看CPU吧。“
说着,我们来到了一块扁平的金属片旁边,“这就是CPU了,没有线程在使用它,看我的。”只见亚当把手靠近它,CPU开始发出一束白色的光束,直刺天空,“它在工作了,我现在处于运行态,待会再和你解释我们线程的状态。刚刚CPU发出的光束,是它在执行一次数据库查询操作。这个过程比较耗时,这个时候我如果要等查询操作完成之后我才松手的话,那就浪费了CPU的计算能力了。”说着,亚当在手上抽开,“等刚才的光回来之后,就是数据库查询的结束,到那时候我再使用CPU就好了,这样我就能干其它事情了,比如,和你聊聊天,哈哈哈。这个过程其实叫做异步。”
我看到CPU又黯淡下来了。其实,从一开始我就想靠近它,刚刚亚当处于运行态的时候,我只能等它完成,我急于想从就绪态转化到运行态。于是,我将手靠近CPU,不出所料,它开始发出光芒,我想让它进行一些数学运算,很快,它就完成了,又恢复到了平常的银白色。
“我问你一个问题,你觉得刚刚我们的操作,在上帝用户耶和华眼里,有先后顺序吗?”亚当问我,我摇摇头,不知道。“没有的,感觉很奇怪是吧。你应该听过这样一句话,天上一天,人间一年。我们和CPU的时间是一样的,这里的一年,在耶和华眼里,其实只有一天。你想想,这是多么令人振奋的事实。我们用CPU做的很多事情,在上帝用户耶和华的感受上,可能就只有一秒钟!这就是为什么我需要你的原因,线程越多,我们就可以用CPU做越多的事情。”
我恍然大悟,“那,只有我们两个线程,对CPU来说,不是还很充足吗?”“是的是的,但是我们先从简单的开始。后面我会用我的肋骨创造更多的线程,到时候,我们可以用一定数目的线程作为一个线程池。到时候会有很多任务,每当有一个任务到来的时候,就派出一个线程来拿到一定的CPU时间,执行一个任务,完成后再让另外一个线程拿到CPU时间片,再执行任务。。。到时候,CPU就可以完全发挥它最大的能力了。“我看到亚当的眼里有闪光,他应该对这个愿景很期待吧,我也是。
我又有一个问题:”谁给我们任务呢?还有,我们没有了任务,会怎么样?“
”是耶和华,他是计算机用户,比如在浏览网页,购买商品,就会给我们很充足的任务。“亚当说。“我们诞生的意义就是为了完成耶和华给的各种各样的、甚至是稀奇古怪的任务。如果我们没有了任务,也就是我们不被需要了,那么我们就会被销毁。但也有可能回到线程池等待,如果有的话。”
刚刚的光束回来了,亚当拿出一个堆栈,“这束光带回来了一个操作结果地址,我会将刚刚数据库查询操作这一过程中用到的局部变量和操作完成之后的返回地址,放到我的堆栈中。接下来我就可以用这些信息继续操作CPU了。”之间亚当将手靠近CPU,CPU使用了亚当堆栈中的信息,”我刚刚是从数据库中查询到用户的个人信息,现在CPU在帮我校验这些信息,完成之后会将结果返回给用户,也就是耶和华。“不出所料,CPU再次发出一束光,透过苍穹,我想,耶和华应该受到了CPU给它的结果了吧。
“刚刚的堆栈,是我们每个线程都会有的,这个东西就不是共享的哦。每个堆栈都会保存我们调用相应过程的局部变量和过程调用完成之后使用的返回地址。堆栈里存放的是执行历史,或者保留现场都可以。我看了旁边悬浮着我的堆栈,里面空空如也,果然和亚当的不一样。
我想问他最后一个问题:“既然是我们在使用CPU,那我们线程和CPU的关系是什么?”
亚当笑了,”我知道你会问这个问题。其实很好回答,我们是用户创造出来的,可以说我们是一种逻辑上的存在,不像CPU是个现实中的物体,线程是CPU上被调度执行的逻辑实体。一个叫做线程调度器的东西会决定我们的执行顺序和获取CPU的时间。还有,虽然我们之间是平等的,但我们属于同一个叫做进程的东西,要不我再很你说说进程?“
“下次吧。”我已经心不在焉了,因为我看到旁边的一颗树上有一个硕大的果实,看起来诱人极了,我不禁向树的方向走去。
欢迎关注我的公众号:小谢backup