惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
S
Secure Thoughts
Application and Cybersecurity Blog
Application and Cybersecurity Blog
AWS News Blog
AWS News Blog
GbyAI
GbyAI
腾讯CDC
WordPress大学
WordPress大学
V
V2EX
小众软件
小众软件
C
CXSECURITY Database RSS Feed - CXSecurity.com
M
MIT News - Artificial intelligence
T
Troy Hunt's Blog
H
Hacker News: Front Page
Scott Helme
Scott Helme
The Hacker News
The Hacker News
Schneier on Security
Schneier on Security
K
Kaspersky official blog
S
Security @ Cisco Blogs
N
News | PayPal Newsroom
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Threatpost
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Martin Fowler
Martin Fowler
P
Privacy International News Feed
Blog — PlanetScale
Blog — PlanetScale
D
DataBreaches.Net
O
OpenAI News
P
Proofpoint News Feed
J
Java Code Geeks
B
Blog RSS Feed
Attack and Defense Labs
Attack and Defense Labs
L
Lohrmann on Cybersecurity
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
阮一峰的网络日志
阮一峰的网络日志
P
Palo Alto Networks Blog
Engineering at Meta
Engineering at Meta
AI
AI
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
Simon Willison's Weblog
Simon Willison's Weblog
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
G
GRAHAM CLULEY
A
Arctic Wolf
N
Netflix TechBlog - Medium
L
LINUX DO - 最新话题
爱范儿
爱范儿
博客园 - 聂微东

博客园 - 我就是那个王小明

git修改历史提交记录名字 gitbase配置两个git仓库源头地址 yarn dev 或者 npm run dev 或node -v 等报错:'node' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 htmlToPdf ES6 Generator使用 - 我就是那个王小明 - 博客园 数组中的每一项按照某个属性分组 - 我就是那个王小明 - 博客园 前端开发快速定位bug的一些小技巧 基本css拼图形 forEach时候删除数组某一属性项,使用splice容易出现问题 对于vue的一些理解 配置vuex并使用 vue搭建开发环境 一些意想不到的小bug。 小程序开发中遇到的问题 rem原理 vue使用webpack压缩后体积过大要怎么优化 分别使用ES5和ES6进行数组去重以及注意事项 package.json和bower的参数解释 Angular.js基础
nodeJS理解
我就是那个王小明 · 2016-09-06 · via 博客园 - 我就是那个王小明

nodejs是一个基于Chrome V8 引擎的JS运行环境,也就是让javascript运行在服务器(server)端
NodeJS使用了一个事件驱动,非阻塞式的I/O模型,使得其轻量又高效。
Nodejs包管理器npm是全球最大的开源生态系统。

nodejs是服务端的js平台。

npm grunt express 等强大的代码与项目管理应用在nodeJS上。

关于NodeJS与传统服务器处理平台(Apache)的区别

Apache的多线程高并发模式

Apache是一种多线程处理并发,但是在一些大型的web应用上也会发生阻塞。

线程和进程

线程是可以独立运行的最小的CPU单位。
线程可以在同一个进程中并发运行,并共享该进程下的内存地址空间。

进程可以支持多个线程,它们看似同时执行,但是相互之间并不同步。
一个进程中的多个线程共享相同的内存地址空间,意味着可以访问相同的变量和对象,并且从同一堆中分配对象。

这样让线程之间共享信息变得容易,但是也要确保他们不会妨碍同一进程中想的其他线程。

NodeJS的异步I/O原理

用数据库的调用举例:

Apache,执行到第一个线程的时候会等待query返回结果,一方面会导致线程长期阻塞等待,另一方面会为了新请求不断增加线程,会浪费大量的资源,同时线程增加会占用大量的CPU时间来处理内存上下文切换。

NodeJS是异步单线程的,应用的是异步回调的方法,也就是异步的I/O
解释:当进程执行的时候,不会等待结果的返回,而是直接执行下面的语句,直到进入事件循环,当数据库执行返回结果的时候会将事件发送到事件队列,等线程进入事件循环之后才会调用之前的回调函数。
也就是nodejs的工作原理其实就是事件循环。每一条nodejs的逻辑都是写在回调函数里面的,而回调函数都是返回之后才异步执行的。

NodeJS也会发生阻塞,但是阻塞发生在自己的单个线程当中,不是发生在后续回调的流程当中。

与php区别

用node来做网站开应用的是分块加载的模式,不用像php那样把所有的数据一次性加载到客户端。

NodeJS相比于php和Apache开的新线程来讲,节省了CPU内存和上下文切换的时间。

NodeJS的应用场景

NodeJs适合应用在具有大量的细小的http请求环境下,例如web的即时聊天程序,或者上万人同时在线的游戏服务器。不用考虑http请求次数过多的问题。