0
点赞
收藏
分享

微信扫一扫

这一次,彻底搞懂进程与线程之间的联系

郝春妮 2022-03-13 阅读 51

什么是进程?

什么是线程?

进程和线程的区别

  • 根本区别:进程是操作系统进行资源调度和分配的基本单位,而线程是CPU进行资源调度和分配的基本单位。
  • 从资源开销上讲:每个进程都有自己的内存空间,进程之间切换性能开销比较大,线程与线程之间是共享代码和内存空间的,每个线程都有自己独立的运行栈和程序计数器,线程之间的开销小。
  • 从包含关系上讲:一个进程可以有多个线程,线程是进程的一部分。
  • 从内存分配上讲:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的。
  • 从影响关系上讲:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都会挂掉,所以多进程程序相对多线程要更加健壮。
  • 从执行过程上讲:进程可以独立执行,但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。

并发和并行的区别

  • 并发:一个处理器同时处理多个任务。类似于两队等一个咖啡机。
  • 并行:多个处理器或者多核处理器同时处理多个不同的任务,类似于两队等待两个咖啡机。

进程之间如何进行通信?

  1. 消息队列
  1. 共享内存
  1. Socket通信

线程之间如何进行通信?

  • 锁机制:互斥锁、读写锁等。
  • 信号量机制
  • 阻塞唤醒机制

进程调度策略

  1. 先来先服务
  2. 最短作业优先调度
  3. 时间片轮转调度(给每个进程分配一个时间片,CPU轮流切换进程执行。)
  4. 最高优先级调度(在时间片轮转的基础上,加上了优先级,调度程既希望给每个进程轮转调度,又希望每次轮转尽可能选择高优先级的进程)

常见问题汇总

RQ1:什么是僵尸进程?

RQ2:Chrome浏览器为什么采用多进程架构?

RQ3:浏览器的不同tab间是线程还是进程?

RQ4:浏览器都有哪些进程事件?

  1. Browser进程:浏览器的主线程,负责浏览器界面的显示与交互,各个页面的管理,创建和销毁其他进程,网络资源的管理和下载等。
  2. Renderer进程:也称为浏览器渲染进程或浏览器内核,其内部是多线程的,主要负责页面渲染,脚本执行,事件处理等。
  3. 第三方插件进程。
  4. GPU进程:用于3D绘制等。

RQ5:浏览器内核都有哪些线程?

  • GUI渲染线程
  • JS引擎线程
  • 定时触发器线程
  • 事件触发线程
  • 异步http请求线程

RQ5:浏览器处理AJAX请求和渲染页面是同一个进程吗,为什么?

RQ6:浏览器的Worker线程和主线程是如何进行通信的?

  1. 主线程采用new命令,调用Worker()新建一个Worker线程。Worker()构造函数的参数是一个脚本文件,该文件就是Worker线程所要执行的任务。
  2. 主线程调用woker.postmessage方法想worker发送消息。
  3. worker线程通过监听函数onmessage收到消息,处理数据然后通过postmessage进行返回。
  4. 主线程通过decodeWorker.onmessage监听函数,接收子线程发回来的消息。
  5. 等Worker完成任务后,主线程就可以把它关掉了。
举报

相关推荐

0 条评论