进程和线程有什么区别?
知识刨析知识刨析 知识刨析
这是一道比较基础的题,但是要想回答的比较好还是有难度的,因为考察的更多是操作系统方面的知识,在回答时可以先从两者的概念入手,再进行对比。
面试回答面试回答 面试回答
进程:进程是应用程序的一个实例,打开一个程序就相当于开启了一个进程,每个进程都会在操作系统中拥有独立的内存空间、地址、文件资源、数据资源等。进程是资源分配和管理的最小单位。
线程:线程从属于进程,是程序的实际执行者,一个进程中包含若干个线程,每个线程都会拥有自己的计数器、堆栈、局部变量等属性,并且能够访问共享的内存变量。线程是操作系统(CPU)调度和执行的最小单位。
两者对比:
第一点,进程是资源分配和管理的最小单位,线程是CPU调度和执行的最小单位。
第二点,进程是拥有系统资源的,而线程是不拥有系统资源的,线程只能去访问隶属进程所占有的系统资源,一个进程所占有的系统资源是被这个进程内的线程所共享的。
第三点,进程创建、销毁、切换的开销要比线程创建、销毁、切换要大的多,在进程创建或者销毁时,系统要为之分配或回收资源,如内存空间、IO设备等,在进程切换时,假如要从A进程切换到B进程,那么就需要把当前A进程的CPU环境保存,然后把CPU环境设置为B进程的,这一部分开销也是很大的,而线程切换时只需保存和设置少量寄存器内容,开销很小,究其根本原因,就是进程占有系统资源而线程不占有系统资源。
第四点,进程之间是相互独立的,且一个进程内的线程相对于其他进程来说也是不可见的。
第五点,进程之间的通信比较复杂,同一台电脑上的进程之间的通信称之为IPC,需要进程同步和互斥手段的辅助来保证数据一致性,不同电脑上进程的通信需要遵守一定的协议,例如http,而线程之间的通信比较简单,这是因为同一进程内的多个线程是共享进程的地址空间的,线程间可以直接通过读/写进程数据段(如全局变量)来进行通信,甚至无需操作系统的干预。