这有个面题,有promise,URL访问过程等,有兴趣可以去瞅瞅
从简单代码入手
var A = 1+2;
var b = 20/5;
var c = 7*8
console.log(A,b,c);
从下面图片进行理解
以工厂为比喻理解进程与线程
为了更好地理解进程和线程的概念,我们可以将计算机系统比作一家大型工厂。在这个工厂里,每个车间(进程)都是一个独立的生产单元,拥有自己的资源和设备,负责特定类型的生产任务。而车间内的工人(线程)则是执行具体任务的基本单位,他们可以在同一车间内协作完成复杂的生产流程。
-
资源调配的独立单元:如同工厂里的不同车间各自负责不同的产品线一样,进程是操作系统中资源分配的基本单位。这意味着每个进程都有其独立的内存空间、文件描述符和其他资源
老板拉投资给a车间修建,其他车间还是原来的烂尾楼。当然,烂尾楼存在危险性。这种设计确保了即使某个车间出现问题,也不会波及到整个工厂的运作。一个进程有问题,其他进程里面的线程不受影响。
-
最小执行单元:在线程层面,它们就像是车间里的工人,每个人员都承担着具体的任务。这些工人可以共享车间内的工具和材料(即进程的资源),并且能够高效地协同工作来完成更复杂的项目。然而,如果一名工人遇到了问题,比如张三在制作零件时出现了错误,这可能会影响到整个车间的工作进度,但不会影响其他车间的操作
这是因为线程之间共享资源的同时也存在依赖关系,一旦某一线程失败,可能会导致整个进程的崩溃。
-
相互独立性:正如各个车间之间的独立性保证了即使某一车间发生故障也不会影响到其他车间一样,在保护模式下的现代操作系统中,进程也是相互独立的。这意味着即使一个应用程序(进程)发生了致命错误,它也不会引起整个系统的崩溃
相比之下,由于线程共享相同的资源,因此如果其中一个线程遇到问题,就可能导致整个进程停止运行。
-
资源回收:当一个车间完成了它的使命或者不再需要时,工厂会对其进行清理并重新分配资源给新的用途。同样地,当一个进程结束其生命周期后,操作系统会自动回收该进程所占用的所有资源,包括但不限于内存空间
Chrome多线程架构
先看看下面图片
一脸懵是不是,下面进行讲解Chrome多线程:
-
主进程:作为浏览器的核心组件,主进程主要负责管理用户界面、下载资源、处理跨进程通信(IPC)、以及协调各个子进程的工作。 它还控制着渲染进程的数量,并确保每个标签页都有一个独立的渲染进程,从而实现了页面间的隔离,避免了一个页面的崩溃影响到其他页面
-
渲染进程:每个标签页对应一个渲染进程,它负责解析HTML文档、构建DOM树、样式计算、布局排版以及JavaScript代码的执行等任务。为了保障安全性,渲染进程被限制在一个沙箱环境中运行,这意味着它们不能直接访问本地文件系统或调用操作系统级别的API,除非得到了用户的明确授权。例如,当涉及到地理位置信息获取、摄像头使用等功能时,浏览器会弹出提示框请求用户同意
-
插件进程:用于加载和管理第三方插件,如Flash播放器或Chrome扩展程序。由于这些插件可能存在安全隐患,因此它们通常也在各自的沙箱中运行,以防止潜在的风险扩散到浏览器的其他部分
从输入URL到页面显示的过程
当我们输入一个网址并按下回车键时,浏览器实际上启动了一系列复杂的操作来呈现最终的网页内容。以下是简化的步骤说明:
-
解析URL:首先,浏览器会解析用户输入的URL,确定目标服务器的位置和服务端口。
-
DNS查询:接着,通过域名系统(DNS)查找与该URL关联的IP地址。
-
建立连接:根据得到的IP地址,浏览器与服务器建立TCP连接,并发送HTTP/HTTPS请求。
-
接收响应:服务器接收到请求后,会返回包含网页内容的数据包。浏览器开始接收这些数据包,并将其组装成完整的HTML文档。
-
启动四个进程:在此期间,浏览器会启动主进程、渲染进程以及其他必要的辅助进程(如网络进程、缓存进程等),以便高效地处理接下来的任务。
-
渲染页面:渲染进程接管HTML文档的解析工作,创建DOM树和CSSOM树,然后进行布局计算和绘制操作。与此同时,JavaScript引擎V8负责执行嵌入式脚本,动态生成部分内容。值得注意的是,为了优化性能,某些元素(如图片、视频)可能会异步加载,而不阻塞主线程的工作
-
交互与更新:一旦页面完全加载完毕,用户就可以开始与其互动。任何进一步的动作(点击链接、提交表单等)都会触发相应的事件处理函数,进而引发新一轮的请求-响应循环。