We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。将进程比喻为工厂的车间,它代表CPU所能处理的单个任务。
线程 是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元。把线程比喻一个车间的工人,即一个车间可以允许由多个工人协同完成一个任务。
进程与线程的关系: 1)进程是操作系统分配资源的最小单位,线程是程序执行的最小单位。 进程是cpu资源分配的最小单位; 2)一个进程由一个或多个线程组成;3)线程上下文切换比进程上下文切换要快得多;4)每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)
单线程与多线程,都是指在一个进程内的单和多。
(对于单进程浏览器,线程之间有可能会恶意修改或者获取非授权数据等复杂的安全问题,进程之间是不共享资源和地址空间的,所以不会存在太多的安全问题)*
对于普通的前端操作来说,最终要的是什么呢?答案是渲染进程。页面的渲染,JS的执行,事件的循环,都在这个进程内进行。浏览器的渲染进程是多线程的
JavaScript引擎是单线程的, 如果处于阻塞线程状态就会影响记计时的准确,通过单独线程来控制。
创建Worker时,JS引擎线程向浏览器申请开一个子线程(子线程是浏览器开的,完全受主线程控制,而且不能操作DOM);JS引擎线程与worker线程间通过特定的方式通信(postMessage API)。WebWorker只属于某个页面,不会和其他页面的Render进程(浏览器内核进程)共享。WebWorker只是属于render进程下的一个线程。
例如:
setTimeout(function(){ console.log('hello!'); }, 0); console.log('begin');
这段代码的作用是当大于0ms(可能是4ms)计时完毕后(由定时器线程计时),将回调函数推入事件队列中(由事件触发线程完成),等待主线程执行(JS引擎线程执行)。HTML5规范规定最小延迟时间不能小于4ms,不过不同浏览器最小时间设定可能不同
执行一个宏任务 -》 执行过程中如果遇到微任务,就将它添加到微任务的任务队列(Job Queues)中 -》 宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行) -》 当前宏任务执行完毕,开始检查渲染,然后GUI线程接管渲染 -》 渲染完毕后,JS线程继续接管,开始下一个宏任务(从事件触发线程管理的事件队列中获取)
以下为补充:
上图仅列出了Browser进程里的2个线程:UI线程和IPC线程。
在Chrome中,用到的就是有名的管道(Named Pipe),只不过,它用一个IPC::Channel类,封装了具体的实现细节。在每一个进程中,只能有一个线程来负责操作Channel,这个线程叫做IO线程。
屏幕上看到的图像都是由一个一个的像素组成的,这些像素就是存放在Bitmap中。可以认为Bitmap就是用来直接展示在窗口上的一个显示对象。
共享内存是进程间通信中最简单的方式之一,也是进程间共享数据的一种最快的方法。共享内存允许两个或更多进程访问同一块内存。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。
【参考】 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
The text was updated successfully, but these errors were encountered:
No branches or pull requests
进程与线程
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。将进程比喻为工厂的车间,它代表CPU所能处理的单个任务。
线程 是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元。把线程比喻一个车间的工人,即一个车间可以允许由多个工人协同完成一个任务。
进程与线程的关系: 1)进程是操作系统分配资源的最小单位,线程是程序执行的最小单位。 进程是cpu资源分配的最小单位; 2)一个进程由一个或多个线程组成;3)线程上下文切换比进程上下文切换要快得多;4)每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)
单线程与多线程,都是指在一个进程内的单和多。
多进程浏览器与单进程浏览器:
1.如果浏览器中的一个tab网页崩溃的话,将会导致其他被打开的网页应用;同理如果是单进程,插件崩溃了也会影响整个浏览器;
2.安全问题:
浏览器的进程:
对于普通的前端操作来说,最终要的是什么呢?答案是渲染进程。页面的渲染,JS的执行,事件的循环,都在这个进程内进行。浏览器的渲染进程是多线程的
关于渲染进程(每个tab页默认有一个渲染进程)
关于WebWorker
事件循环与渲染进程中的线程的关系:
例如:
这段代码的作用是当大于0ms(可能是4ms)计时完毕后(由定时器线程计时),将回调函数推入事件队列中(由事件触发线程完成),等待主线程执行(JS引擎线程执行)。HTML5规范规定最小延迟时间不能小于4ms,不过不同浏览器最小时间设定可能不同
执行一个宏任务 -》 执行过程中如果遇到微任务,就将它添加到微任务的任务队列(Job Queues)中 -》 宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行) -》 当前宏任务执行完毕,开始检查渲染,然后GUI线程接管渲染 -》 渲染完毕后,JS线程继续接管,开始下一个宏任务(从事件触发线程管理的事件队列中获取)
以下为补充:
Browser进程
上图仅列出了Browser进程里的2个线程:UI线程和IPC线程。
关于浏览器进程与进程间通信
在Chrome中,用到的就是有名的管道(Named Pipe),只不过,它用一个IPC::Channel类,封装了具体的实现细节。在每一个进程中,只能有一个线程来负责操作Channel,这个线程叫做IO线程。
关于Bitmap
屏幕上看到的图像都是由一个一个的像素组成的,这些像素就是存放在Bitmap中。可以认为Bitmap就是用来直接展示在窗口上的一个显示对象。
关于共享内存
共享内存是进程间通信中最简单的方式之一,也是进程间共享数据的一种最快的方法。共享内存允许两个或更多进程访问同一块内存。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。
Browser和Renderer通信过程(**为修改补充的)
【参考】
从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
The text was updated successfully, but these errors were encountered: