Node特性:高并发
在解释node为什么能够做到高并发之前,不妨先了解一下node的其他几个特性:
单线程
我们先来明确一个概念,即:node是单线程
的,这一点与JavaScript在浏览器中的特性相同,并且在node中JavaScript主线程与其他线程(例如I/O线程)是无法共享状态的。
单线程的好处就是:
PS:陆续开始更新秋招面经
从三月初开始投第一份简历开始,到五月拿到百度offer,历时三个月的春招也告一段落了。期间一直没有时间更博,拿到百度offer后也咸鱼了一段时间,推了几家面试和offer,现在对春招考到的题做个总结和梳理吧。
HTTP 1.0
需要使用keep-alive
参数来告知服务器建立长连接,而HTTP 1.1
默认支持长连接,减少了TCP连接次数,节约开销。
但HTTP 1.0
所保持的TCP每次只能处理一个请求,最典型的就是pipline管线化模型,虽然能一次性接收多个请求,但是还是得按顺序一次处理一个请求,这样很容易造成后续请求等待前序请求完成,造成阻塞,也就是我们常说的”线头阻塞”。
并且对于request和response,HTTP 1.0
都是以文本的方式进行传输,这就导致数据必须按照顺序进行传输。
HTTP 1.1
支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端只有接收到100,才开始把请求body发到服务器。当服务器返回401的时候,客户端就可以不用发送请求body了,这样节约了带宽。
HTTP 1.1
支持host域,服务端可以通过host域设置多个虚拟站点来共享一个ip和端口。
写在开头:这篇文章被我归入博客性能优化类别,是因为我认为如果我们要优化网站性能、提升用户体验,首要目标就是要知道用户在本地请求并加载你的网页的过程中,到底发生了什么,在此基础上我们才能更好的优化网页。
图源:知乎-张秋怡