我读过有关node.js 和其他服务器(例如Apache)的信息,它们的线程是不同的。我根本不明白线程是什么意思。
如果我有一个运行 SQL 来访问数据库的网页,例如一个服务器端页面中的三个不同数据库,这对于 Node.js 中的线程意味着什么?阿帕奇?这里的“线程”是什么意思?
或者正如我看到的一篇文章,“启动一个新线程来处理每个请求”。
Apache 每个请求都会生成一个线程,而 Node.js 不会,这是什么意思?
编辑:我希望有一个我能掌握的例子。我习惯于使用访问数据库的服务器端页面。该文件内有几个连接。
线程是程序执行的上下文。单线程程序一次只能做一件事,而多线程程序可以一次做很多事情。
可以把它想象成餐厅的厨房。一个厨师实际上一次只能完成一项任务,比如切洋葱或将东西放入烤箱。如果收到的订单需要厨师做大量工作(例如制作沙拉与将东西放入烤箱并等待),则某些餐点可能会因为厨师很忙而延迟。另一方面,如果厨师只需要烤一堆东西,那么他就没有太多工作要做,他可以在等待烤箱中的食物完成的同时做其他饭菜。
如果有多名厨师,其中许多任务可以同时完成。可以同时准备许多餐点。
Apache 的线程模型就像雇佣固定数量的厨师(不管你的餐厅当晚有多少顾客),每个厨师一次只能做一顿饭。这意味着,如果收到餐食订单,则会指派一名专门的厨师来处理该餐食。有时,厨师会忙着切碎原料和混合蛋糕面糊,但有时他只是站在那里等待土豆煮沸。在任何给定时间,您的大多数厨师都可能闲着,等待土豆煮沸和蛋糕烘烤,并且不会再处理更多订单,因为每个厨师一次只专注于一份订单。
更糟糕的是,你的厨房只有你能负担得起的大小。每个厨师都会占用空间和资源,您可能会遇到这样的情况:一群厨师拿着唯一可用的勺子站在周围,阻止其他厨师制作食物。
Nginx 是另一个您没有询问的 Web 服务器(通常用作代理),但我将其包括在内是为了解释另一个线程模型。它还雇用固定数量的厨师,但雇用的人数较少。每个厨师可以同时制作多顿饭菜。因此,如果他们正在等待土豆煮沸,而同时收到切碎沙拉的订单,他们可以继续制作沙拉,而不是无所事事地站着。您可以拥有较小的厨房(相对于餐厅的大小/顾客数量)并获得相同或更多的外出就餐次数。这是一个紧密的团队,有效地不浪费时间和资源。
Node.js 有点不同。从 JavaScript 的角度来看,它是单线程的,但磁盘和网络 IO 等其他任务是在单独的线程上自动处理的。这就像厨房里只有一名厨师,但在某些情况下这是有道理的。如果您的厨房需要那位厨师做很多繁忙的工作,那么雇用更多的厨师来工作也许是有意义的。 (要在 Node.js 中执行此操作,您只能生成更多进程,这实际上就像建造一堆彼此相邻的小厨房。您可以让一个人站在前面协调所有这些厨房的订单。) ,如果你只是一家面包店(主要只是IO,厨师的工作很少),也许你只需要一名厨师。
综上所述,使用不同的线程模型来划分工作并有效地处理它。哪种线程模型有意义取决于您的需求以及您选择的服务器的其他特征。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)