美文网首页
19.进程和线程归纳

19.进程和线程归纳

作者: zwj2024 | 来源:发表于2017-11-14 15:04 被阅读25次

1.线程与进程的区别?
2.线程和进程的关系、通性
3.既然,线程和进程是存在通性的,那么为什么操作系统还要设置线程这个单位,那就说说线程的几点好处?
4.什么是多进程和多线程?
5.浏览器内核是多线程
6.javaScript单线程执行机制
7.Node.js单线程执行机制

1.线程与进程的区别?

1.进程是操作系统分配资源的最小单位,拥有独立的地址空间。计算机就像工厂,进程是个大车间,计算机内部有很多个这样的大车间;线程是程序执行的最小单位。同一个进程下的所有线程,共享进程的地址空间。线程是工人,每一个车间里的工人至少有一个。
2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线。
3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号)。
4.线程上下文切换比进程上下文切换要快得多。

2.线程和进程的关系、通性

关系:进程中包含着至少一个线程。在进程创建之初,就会包含一个线程,这个线程会根据需要,调用系统库函数去创建其他线程。注意的是,这些线程之间是没有层级关系的,他们之间协同完成工作。在整个进程完成工作之后,其中的线程会被销毁,释放资源。

通性:都包含三个状态,就绪、阻塞、运行。通俗的讲,阻塞就是资源未到位,等待资源中。就绪,就是资源到位了,但是CPU未到位,还在运行其他。

3.既然,线程和进程是存在通性的,那么为什么操作系统还要设置线程这个单位,那就说说线程的几点好处?

线程微观并行。但是,在一个进程内部,一个线程阻塞后,会执行这个进程内部的其他线程,而不是整体阻塞。从某种意义上,提高了CPU的利用率。

4.什么是多进程和多线程?

多进程:多进程指的是在同一个时间里,同一个计算机系统中两个或两个以上的进程处于运行状态。多进程带来的好处是明显的,比如你可以听歌的同时,打开编辑器敲代码,编辑器和听歌软件的进程之间丝毫不会相互干扰。
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

5.浏览器内核是多线程(涉及到执行栈和事件队列)

浏览器内核是多线程,在内核控制下各线程相互配合以保持同步,常驻线程有:GUI 渲染线程、JavaScript引擎线程、定时触发器线程、事件触发线程、异步http请求线程

1.GUI渲染线程:负责渲染浏览器界面HTML元素,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。在Javascript引擎运行脚本期间,GUI渲染线程都是处于挂起状态的,也就是说被”冻结”了。
2.Javascript引擎线程:Javascript引擎,也可以称为JS内核,主要负责解析Javascript脚本,运行代码。
3.定时触发器线程:浏览器定时计数器不由JavaScript引擎计数的, 因为JavaScript引擎是单线程的, 就会处于阻塞线程状态, 因此通过单独的线程来计时并触发定时。
4.事件触发线程:当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可以是当前执行的代码块如定时任务、也可来自浏览器内核的其他线程如鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。
5.异步http请求线程:在XMLHttpRequest在连接后是通过浏览器新开一个线程请求, 将检测到状态变更时,异步线程就产生状态变更事件放到 JavaScript引擎的处理队列中等待处理。

GUI 渲染线程 与 JavaScript引擎线程互斥!
由于JavaScript是可操纵DOM的,如果在修改这些元素属性同时渲染界面(即JavaScript线程和UI线程同时运行),那么渲染线程前后获得的元素数据就可能不一致了。因此为了防止渲染出现不可预期的结果,浏览器设置GUI渲染线程与JavaScript引擎为互斥的关系,当JavaScript引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到引擎线程空闲时立即被执行。

JS阻塞页面加载
从上面我们可以推理出,由于GUI渲染线程与JavaScript执行线程是互斥的关系,当浏览器在执行JavaScript程序的时候,GUI渲染线程会被保存在一个队列中,直到JS程序执行完成,才会接着执行。因此如果JS执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。比如渲染页面,而是直到js下载并执行完毕。
关于JavaScript的阻塞,要对其优化,注意:先让页面渲染完,再加载js。
a、将<script>内嵌和外链,在可以的情况下,放在<body>底部。注:对于css,浏览器是并行下载
b、在页面onload后,加载js
c、html5 <script>标签的defer属性,在页面加载完成后下载
d、使用创建<script>标签的方式,在页面加载完成后添加进去。

6.javaScript单线程执行机制

那么为什么Javascript要是单线程的?这是因为Javascript这门脚本语言诞生的使命所致:假设存在两个线程同时操作一个DOM,一个负责修改一个负责删除,那么这个时候就需要浏览器来裁决如何生效哪个线程的执行结果。

从哪里可以得出javaScript是单线程?比如你页面一上来就alert(“hello world~”);只要你不关闭这个对话框,后续的js代码就不会再执行。因为,单线程就是这样一步一步的顺次执行,前面不执行完,后面不会执行。

JavaScript明明可以处理各种触发事件,感觉上是异步多线程?其实,JavaScript单线程的执行浏览器的一个事件队列。浏览器是事件驱动的、异步多线程的。浏览器内部有一个事件轮询(event loop),也就是js要处理的事件队列。

7.Node.js单线程执行机制

Node.js其实还不是真正意义上的js,是借用了js语法实现的,达到真正意义的非阻塞服务端语言。但是他的运行机制,也是事件轮询 (Event Loop)。

相关文章

  • 19.进程和线程归纳

    1.线程与进程的区别?2.线程和进程的关系、通性3.既然,线程和进程是存在通性的,那么为什么操作系统还要设置线程这...

  • Java-Thread 1

    /** * Created by lenovo on 2016/3/19. * 进程: * 线程:就是进程中的一个...

  • 进程和线程的区别

    线程与进程的区别归纳:a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可...

  • Java进程与线程归纳

    Java进程与线程归纳 接触java开发或者Android开发的时候,必不可少的会接触到进程、线程这样的概念和知识...

  • 线程和进程概念

    线程和进程 进程 线程 线程和进程的区别

  • 17_多线程

    =================线程和进程 =============进程 =============线程 ==...

  • 单核和多核,单进程和多进程,单线程与多线程

    之前我对单进程、多进程、单线程、多线程,单核、多核、并发、并行;总是没有详细的认知;因此准备归纳总结下,加强自己的...

  • OC-底层原理 23:多线程原理

    本文的目的在于了解进程、线程、多线程、线程池等的基本概念及原理 线程 和 进程 线程和进程的定义 线程 线程时进程...

  • iOS 多线程原理

    本文的目的在于了解进程、线程、多线程、线程池等的基本概念及原理 线程 和 进程 线程和进程的定义 线程 线程时进程...

  • 线程

    线程和进程 进程 线程 线程和进程的区别 线程的好处和坏处 创建线程的方式一 线程中常用的方法 代码实例 创建线程...

网友评论

      本文标题:19.进程和线程归纳

      本文链接:https://www.haomeiwen.com/subject/kypxvxtx.html