扛着锄头写代码之nodejs初识

简介: 扛着锄头写代码之nodejs初识

引子

为了web app而看的nodejs,对于nodejs的单线程对高并发友好小小烟纠了下,分享,欢迎指正谬误。。。

都说单线程nodejs能减少I/O问题,淘宝team说它是一个平台而不是一种语言,它的单线程是指JS执行线程(其实就是主线程的意思),实际的I/O操作都是多线程执行的。(题外话)

那开始入正题。

简单的说 Node.js 就是运行在服务端的 JavaScript。

Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。

Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。

我们假设现在有两种餐厅的出餐模式:

apache模式,以下简称A模式。一共有三个点餐窗口,三位服务人员,三位厨师(请自行脑补画面,但是别乱想)。顾客在任一窗口点餐[所谓多线程],点完后服务员传达厨师,等待厨师出餐,服务员返给顾客[同步返回响应结果]。顾客本次购物结束。服务员进行下一位顾客的点餐[接收下一个请求]。

nodejs模式,以下简称N模式。一共只有一个点餐窗口一位服务员[单线程],一位厨师[CPU]。顾客在窗口点餐,点完后服务员传达厨师,厨师进行出餐,而服务员不必等待[不必等待当前请求返回结果],直接进行下一位顾客的点餐,然后继续传达下一个顾客的订单给厨师。厨师挨个完成后抛出给出餐窗口[异步返回响应结果],顾客到出餐窗口取餐,本次购物结束。

那么问题来了,假设餐厅做的是卤味(配酒的那种你懂的),此时同时来了四个顾客。A模式下有三位顾客可三个窗口同时点餐,另一位需等待或者说顾客觉得满载[无法接收请求]也下不了单直接走人去隔壁老王家了,厨师加热2分钟后出餐,平均每人等待2分钟。N模式下必须排队,但是可以无需等待,四位顾客都可先下单,第四位顾客的等待时间应该是八分钟之内,然后到出餐窗口取。这种模式下不仅能避免A模式下因两位顾客同时点了仅剩的一份鸡爪而产生的厨师对资源处理[数据处理]的矛盾问题而且能解决同时多人来下单下不了单的问题[高并发]。

问题又来了,假设我做的是莆田卤面生意,假设加工一份要10分钟(豪华版),如果同时来三位顾客,那A模式下每位顾客10分钟后可用餐,但是N模式下第三位要30分钟后才能用餐,因为一位厨师忙不过来了,你下单了还是要等着,表示不饿死也馋死了。这大概就是为什么需要CPU大量计算的不适合使用nodejs的一个说法吧。

总结:node适合运用在高并发、io密集、少业务逻辑的场景。

应该说各有千秋吧,没有最好的只有最适合的(请注意,话题开始跑偏)。。??~~

相关文章
|
7月前
|
JavaScript 前端开发 算法
Node.js 艺术:用代码打印出绚丽多彩的控制台柱状图
Node.js 艺术:用代码打印出绚丽多彩的控制台柱状图
107 0
|
3月前
|
存储 JavaScript 前端开发
webSocket+Node+Js实现在线聊天(包含所有代码)
文章介绍了如何使用WebSocket、Node.js和JavaScript实现在线聊天功能,包括完整的前端和后端代码示例。
227 0
|
4月前
|
消息中间件 JavaScript 中间件
函数计算产品使用问题之WebIDE编写的Node.js代码是否会自动进行打包部署
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
1月前
|
JavaScript C++ 容器
【Azure Bot Service】部署NodeJS ChatBot代码到App Service中无法自动启动
2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv' 2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify' 2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'
43 11
|
23天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
5月前
|
缓存 JavaScript API
NodeJS代理配置指南:详细步骤和代码示例
**Node.js 代理配置:解决HTTP请求转发与CORS挑战** 在现代开发环境中,Node.js以其高效和灵活性深受青睐,但正确配置代理以处理跨域请求和API调用仍是复杂任务。本文提供全面指南,从基础到高级设置,教授如何在Node.js中使用代理,覆盖httpOptions、npm代理及第三方库的运用,以增强API调用灵活性。
NodeJS代理配置指南:详细步骤和代码示例
|
5月前
|
开发工具 git
vscode设置 git提交代码忽略node_modules,dist,vscode如何设置不提交node_modules,dist
vscode设置 git提交代码忽略node_modules,dist,vscode如何设置不提交node_modules,dist
580 0
|
7月前
|
SQL 前端开发 JavaScript
前端vite+vue3结合后端node+koa——实现代码模板展示平台(支持模糊搜索+分页查询)
前端vite+vue3结合后端node+koa——实现代码模板展示平台(支持模糊搜索+分页查询)
173 4
|
7月前
|
设计模式 测试技术
在实现链表的代码中,为什么要使用`Node`类而不是直接在`LinkedList`类中定义节点?
在实现链表的代码中,为什么要使用`Node`类而不是直接在`LinkedList`类中定义节点?
63 1
下一篇
DataWorks