好吧,鉴于世界之窗又一次在多页面同时开启时就阵亡,而Chrome还妥妥的,实在讨厌不明不白的感觉,所以决定了解一下浏览器,暂时先了解一下线程与进程~
一个浏览器给我们直观的体验来自于DNS预读取,浏览器内核对HTML,CSS,JS的解析,页面的排版与渲染,浏览器本身架构,包括进程与线程。
进程与线程的简单介绍
进程:一个具有独立功能的程序及其数据在执行任务的机体上按序执行的活动,一般我们编写程序就是按一定逻辑,一定顺序去执行某些特定操作,完成特定功能,此过程就好像用程序去指挥计算机如何工作,是程序在一个数据集合上运行的过程,会涉及到资源的调配,内存的使用。每一进程都有自己的地址空间,与其他进程独立开了。好吧,你可以把它看做实验室里正在进行的实验,一步一步的导出结果。
线程:进程中某单一顺序的控制流程,一个进程可以运行多个线程,此时各线程共享该进程资源,可以并发执行,但线程间存在资源抢占问题,相互制约,致使线程运行呈现间断性。相当于同一项目,同一实验室里的小伙伴们,每人负责这一实验的不同模块,当然,此时的电脑,焊台,测试工具,网线,插座等资源都是定量的,所以,你要使用相关资源时,该资源必须不被占用,否则请耐心等待吧~
看看浏览器表现:
页面假死:即浏览页面时网页失去响应,准确的说是反应过慢,看不到页面变化,一个网页假死常常会造成整个浏览器反应迟钝甚至完全无法使用,好像蒙上了层纱布,无法对浏览器进行任何操作,这时如果等上一段时间也许浏览器会缓过气来,不过你的时间就流光了,有时候还可能你是时间也走了,浏览器也岔气了~我们编写代码时,如果代码过于复杂,js运行计算时常过长,页面控件数据量过多,代码有漏洞,内存泄漏严重都会造成页面假死现象。而对于浏览器,则可能由于被篡改而内核被破坏,本身bug,补丁错误等原因而造成假死现象。
一般浏览器对此的解决措施是使用多线程架构,即每个页面启动一个独立线程,同一进程里的线程是共享内存区的,这种技术占用的系统资源少,当多个线程同时请求同一资源时则可能出现问题,此时,还是得看浏览器如何去处理了。
页面崩溃:指页面脚本与浏览器不兼容,或浏览器本身问题,而导致网页与电脑某一程序冲突,无法开启。这种现象给我的最直接表现就是:页面崩溃了~
为了应对浏览器崩溃现象,便出现了多进程架构:每个网页使用不同进程来打开,页面假死与页面崩溃都不会对整个浏览器造成影响,同时页面关闭后进程便会完全释放,网页占用资源会彻底清除。IE8,与Chrome采用的就是这种技术,不过这种技术占用内存多。
多进程与多线程实际上只是使单页面的假死或崩溃不影响其它页面,而并非假死,崩溃页面的抢救者。
说回Google Chrome,它会创建一个浏览器进程,插件进程,同时给每个页面创建独立的渲染器进程,以实现各页面的隔离。所以我现在使用的Chrome暂时妥妥的~当然其中还有更加深层次的原因,还有好多东西可以探究,所以如果你有不同意见或其他见解,欢迎留言。
这探索之旅还长着呢~