对 nodejs 的单线程的理解

和其他多线程语言进行对比

类比:

从前,小镇上有两家餐馆,一家老板聘用了很多服务员,而另一家的老板只聘用了一位服务员

所以,自然而然就会出现以下的画面:

如果餐馆都来了4位客人

拥有多名服务员的餐馆

四名服务员分别服务一位客人。

在这里插入图片描述

只拥有一名服务员的餐馆

唯一的服务员在四位客人之间穿梭。

在这里插入图片描述

分析:

上面的例子中:

在这里插入图片描述

所以我们可以看出两家餐馆的处理事件的方式:

在这里插入图片描述

我们称第一家餐馆书里事件的方式为多线程,第二家餐馆处理事件的方式为单线程

我们理解为在第一家餐馆的处事原则中,他一个线程只处理一个事件,

第二家餐馆的处事原则是一个线程同时处理了多个事件。

事件我们简单地认为就是 计算 和 io操作。

第一家每一个服务员在服务自己的客人的时候,在客人进行点餐的时候(理解为计算),就在那里等着,不进行任何操作,因为他也没有别的人需要服务。

而第二家服务员在自己的客人点餐(理解为计算)的时候,还可以帮助别的客人结账(理解为 io 操作)。

可以看出第一家餐馆的服务员利用效率较低,而第二家的服务员被当做老黄牛来使用,效率极高。

回归到计算机:

在 CPU 发出 io 命令之后,磁盘开始读取数据,但如果读取的数据比较多的时候, CPU就晾在一边什么都不干了,这样就极大地浪费了 CPU ,它本来可以在磁盘正在操作别的事情的时候,进行一些计算之类的操作,而不是死等闲着。

在这里插入图片描述

所以 nodejs 的操作就是让一个服务员极限操作,不能让他闲下来,他得在各种事务之间不停操作,这样可以让他的效率达到接近100%,这就是 nodejs 的哲学。

坏处:
nodejs 把一个服务员当老黄牛来使用,万一他生病了,整条业务都停掉了,而多线程就不会出现这种问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城南顾北

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值