contents
面试基础知识巩固
进程和线程
进程与线程的典型例子:打开微信软件,属于一个进程启用;在微信中进行聊天、刷朋友圈等各种操作,这些操作就是线程
可以说"进程"包含"线程","线程"是"进程"的子集
什么是进程?什么是线程?
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配基本单元,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程时线程的容器。程序是指令、数据及组织形式的描述,进程时程序的实体。
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
简单总结
- 进程指系统中正在运行的一个应用程序;程序一旦运行就是进程;进程是系统进行资源分配的基本单位。
- 线程是系统分配处理器时间资源的基本单元,或者说它是进程之内独立执行的一个单元执行流,它是程序执行的最小单元。
- 一个程序至少有一个进程,一个进程至少有一个线程,也可以由多个线程组成
进程和线程的区别?
- 进程时资源分配的最小单位
- 线程是程序执行的最小单位,也是处理器调度的基本单位,但进程不是,二者均可并发执行
- 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作的资源代价昂贵。而线程共享进程中的数据,使用相同的地址空间,因此,CPU切换一个线程的资源开销比进程要小很多,同时创建一个线程的开销也比进程小很多
- 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程间需要以IPC方式进行通信。多线程编程需要处理好同步和互斥的情况。多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也会跟着死掉,而一个进程死掉不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
- 进程切换时,资源开销大,效率低。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且共享某些资源的并发操作,只能用线程不能用进程。
- 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
- 线程执行开销小,不利于资源的管理和保护,线程适合在SMP(多核机器)上运行。进程执行开销大,但是能够很好的进行资源管理和保护,可以跨及其迁移。