聊个好玩的话题,就是用libuv库实现的事件轮询。啥叫“事件轮询”?别急说来听听。
咱们先来搞清楚那个轮询机制是啥。总共就只有6个环节,没错,就是这6步。首当其冲的就是timers环节,这个玩意儿主要负责计算时间,还有在预定时间触发定时器的回调函数。也就是咱们设置的时间点特性之类的。
现在来到下一环节,也就是所谓Pendingcallbacks,简称BCK。这不,它就是搞系统运作的回调,比如TCP出错啥的。咋样,听着是不是有些生涩?
接下来是无聊和准备环节。其实这两个小阶段就是把场地和道具弄好罢了。可别小瞧它们,要是没准备好,后面的精彩表演也就玩不转了。
下面要说到我们的关键环节啦——也就是我们常说的“轮询”。在这个环节我们会持续地从一个叫轮询队列的地方拿到回调函数进行处理。当队列里还剩有函数时,咱们就一个接着一个地执行,直至队列彻底清空或是到达平台设定的上限为止。若是队列已经空空如也了?那就得根据具体情况再做选择。
假如你曾经用过setImmediate函数,好的,马上跳到检查阶段去。但要是你还没设过它,那就在现在这个轮询阶段等着,等到队列里有人家想要加入的新回调function。当然,假如定时器准时到了,也是可以直接跳转的。
行了行了,别忙走!还有最后一步。这一步叫作 close callbacks关门阶段。在这儿干啥?做关闭的反弹函数,也就是处理跟关门有关的那堆儿事儿。
你好是不是觉得有了解决回调问题工具了?这就对了,今天咱们讲的内容就是这个现象级别的简答轮询,用来解决各种回调问题,像开闭时间、系统运行等等,都不在话下。当然,弄起来可能稍显复杂一些,但是毕竟是它有针对性地解决问题。希望看完此文,你对这个简答轮询能有所认同,如果有啥感言或困扰,快留言告诉我,我会尽量帮你解答。最后别忘了给个赞,分享一下,这对我可是很大的鼓励!
评论0