如何理解Node.js的单线程

 我来答
huanglenzhi
2017-11-25 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517184
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
Node.js中单线程就相当于火车站售票厅只开一个售票窗口,那么所有的人都要通过这个窗口去买票,如果说这些人不排队都争抢这个窗口,可想而知,每一个人想买到票很难,还有一个就是我们经常做公交车,公交车师傅有时候只开前门,这时候很多人都抢着上车,你会发现挤上车特别难,现实生活中,只开一个门或只开一个售票窗口,在程序上看来都是单线程的,此时,就需要引入排队机制,不排队就会产生拥堵,随都做不了事情
生活如此,程序也是如此,不引入排队机制,就会产生阻塞
再回到Node.js,既然它是单线程的,就不能是阻塞的,就像一个人 站在售票口那里,突然发现自己没带钱,然后他就打电话叫别人送点钱过来,而此时这个人依然站在售票口那里,坚决不让出位置让后面的人买票,可想而知,就产生阻塞
现实生活中,如果这个人发现自己没带钱,最好的办法应该是这样做
始终与后面买票人交换一下位置 ,很多黄牛之所以可以快速的帮别人买票就是这样做的,因为黄牛专门有人在售票口那里占位
所谓事件驱动就是,一旦你造成阻塞了,你就靠一边站,等到什么时候不再阻塞,你再通知我,我再把你加入排队当中,再次等待被处理
众所周知,IO都是阻塞的,而Node.js却说自己是非阻塞IO,那么只能说明一点,IO肯定不是由Node.js来处理, Node.js会把IO这项工作分配给别人来做,别人IO完了,再事件通知Node.js,将IO结果重新加入排队,等待被处理
类似的生活案例还有,医院专家门诊看病,做B超相当于IO,做完B超完回来,一般需要重新加入排队;或者在做B超前,医生叮嘱他,你做完B超后就可以拿着B超结果直接找我不必要再重新排队
来自九里关休闲的青花菜
2017-11-24 · 超过17用户采纳过TA的回答
知道答主
回答量:43
采纳率:100%
帮助的人:25.6万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式