什么是进程?
什么是线程?
进程和线程的区别
根本区别
:进程是操作系统进行资源调度和分配的基本单位,而线程是CPU进行资源调度和分配的基本单位。从资源开销上讲:
每个进程都有自己的内存空间,进程之间切换性能开销比较大,线程与线程之间是共享代码和内存空间的,每个线程都有自己独立的运行栈和程序计数器,线程之间的开销小。从包含关系上讲:
一个进程可以有多个线程,线程是进程的一部分。从内存分配上讲:
同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的。从影响关系上讲:
一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都会挂掉,所以多进程程序相对多线程要更加健壮。从执行过程上讲:
进程可以独立执行,但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。
并发和并行的区别
并发:
一个处理器同时处理多个任务。类似于两队等一个咖啡机。并行:
多个处理器或者多核处理器同时处理多个不同的任务,类似于两队等待两个咖啡机。
进程之间如何进行通信?
- 消息队列
- 共享内存
- Socket通信
线程之间如何进行通信?
- 锁机制:互斥锁、读写锁等。
- 信号量机制
- 阻塞唤醒机制
进程调度策略
- 先来先服务
- 最短作业优先调度
- 时间片轮转调度(给每个进程分配一个时间片,CPU轮流切换进程执行。)
- 最高优先级调度(在时间片轮转的基础上,加上了优先级,调度程既希望给每个进程轮转调度,又希望每次轮转尽可能选择高优先级的进程)
常见问题汇总
RQ1:什么是僵尸进程?
RQ2:Chrome浏览器为什么采用多进程架构?
RQ3:浏览器的不同tab间是线程还是进程?
RQ4:浏览器都有哪些进程事件?
- Browser进程:浏览器的主线程,负责浏览器界面的显示与交互,各个页面的管理,创建和销毁其他进程,网络资源的管理和下载等。
- Renderer进程:也称为浏览器渲染进程或浏览器内核,其内部是多线程的,主要负责页面渲染,脚本执行,事件处理等。
- 第三方插件进程。
- GPU进程:用于3D绘制等。
RQ5:浏览器内核都有哪些线程?
- GUI渲染线程
- JS引擎线程
- 定时触发器线程
- 事件触发线程
- 异步http请求线程
RQ5:浏览器处理AJAX请求和渲染页面是同一个进程吗,为什么?
RQ6:浏览器的Worker线程和主线程是如何进行通信的?
- 主线程采用new命令,调用Worker()新建一个Worker线程。Worker()构造函数的参数是一个脚本文件,该文件就是Worker线程所要执行的任务。
- 主线程调用woker.postmessage方法想worker发送消息。
- worker线程通过监听函数onmessage收到消息,处理数据然后通过postmessage进行返回。
- 主线程通过decodeWorker.onmessage监听函数,接收子线程发回来的消息。
- 等Worker完成任务后,主线程就可以把它关掉了。