进程与线程

Posted lyt0207

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程与线程相关的知识,希望对你有一定的参考价值。

1. 进程:程序的一次执行, 它占有一片独有的内存空间
技术图片

 

 

2. 线程: CPU的基本调度单位, 是程序执行的一个完整流程,是一个进程中代码的不同执行路线
3. 进程与线程
  * 一个进程中一般至少有一个运行的线程: 主线程,进程启动后自动创建
  * 一个进程中也可以同时运行多个线程, 我们会说程序是多线程运行的
  * 一个进程内的数据可以供其中的多个线程直接共享
  * 多个进程之间的数据是不能直接共享的,进程间的内存是独立的
  * 线程池(thread pool):保存多个线程对象的容器,实现线程对象的反复利用
4. 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
    而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
    多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
5. 一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。
    而进程由内存空间(代码,数据,进程空间,打开的文件)和一个或多个线程组成。
    线程ID:每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程
    寄存器组的值:由于线程间是并发运行的,每个线程有自己不同的运行线索,当从一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便        将来该线程在被重新切换到时能得以恢复。
    :是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。
    操作系统在切换线程的时候会自动的切换栈,就是切换 SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。
  * 何为多进程与多线程?
    多进程运行:一个应用程序可以同时启动多个实例运行;多线程:在一个进程中,同时有多个线程运行。

 

  * 比较单线程与多线程:
    多线程:优点,能有效提升CPU的利用率;缺点,创建多线程开销,线程间切换开销,死锁与状态同步问题。
    单线程:优点,顺序编程简单易懂;缺点,效率低。
  * JS是单线程还是多线程?
    JS是单线程运行的,但使用H5中的Web Workers可以多线程运行。
  * 浏览器运行是单线程还是多线程?
    都是多线程运行的。
  * 浏览器运行是单进程还是多进程?
    有的是单进程:firefox,老版的IE;有的是多进程:chrome,新版IE等。
4. 浏览器运行是单进程还是多进程?
  * 有的是单进程
    * firefox
    * 老版IE
  * 有的是多进程
    * chrome
    * 新版IE
5. 如何查看浏览器是否是多进程运行的呢?
  * 任务管理器==>进程
6. 浏览器运行是单线程还是多线程?
  * 都是多线程运行的
 

以上是关于进程与线程的主要内容,如果未能解决你的问题,请参考以下文章

Android中线程与线程,进程与进程之间如何通信?

JAVA线程与线程进程与进程间通信

OS——进程与线程

OS——进程与线程

OS——进程与线程

OS——进程与线程