一、进程和线程简介
1.概念
1.1多任务
程序的运行是CPU和内存协同工作的结果
操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统
问题1:什么是多任务?
就是操作系统可以同时运行多个任务。打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行。还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已
问题2:多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。由于CPU执行代码都是顺序执行的,那么,单核CPU是怎么执行多任务的呢?
答案:操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。实际上,每个任务都是交替执行的,但是,表面上看,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样【现在的电脑最起码都4核起】
并行:真正一起执行,任务数量小于cpu的核心数量【理想型】
并发:看上去一起执行,任务数量大于cpu的核心数量【现实型】
多核cpu实现多任务的原理:真正的并行执行多任务只能在多核cpu上实现,但是由于任务数量远远远多于cpu的核心数量,所以操作系统也会自动把很多任务轮流调度到每个核心上执行
对于操作系统而言,一个任务就是一个进程【process】,一个操作系统可以开启多个进程;有的进程启动之后,有可能又需要处理多个子任务,这些子若任务被称为线程【thread】
1.2进程
是一个程序的运行状态和资源占用(内存,CPU)的描述
进程是程序的一个动态过程,它指的是从代码加载到执行完毕的一个完整过程
【面试题】进程的特点:
a.独立性:不同的进程之间是独立的,相互之间资源不共享(举例:两个正在上课的教室有各自的财产,相互之间不共享)
b.动态性:进程在系统中不是静止不动的,而是在系统中一直活动的(举例:教室里一直在讲课)
c.并发性:多个进程可以在单个处理器上同时进行,且互不影响(举例:一栋教学楼是处理器,多个教室同时上课就相当于多个进程,相互之间不影响)
1.3线程
线程是进程的组成部分,一个进程可以有多个线程,每个线程去处理一个特定的子任务
线程的执行是抢占式的,多个线程在同一个进程中可以并发执行,其实就是CPU快速的在不同的线程之间切换,也就是说,当前运行的线程在任何时候都有可能被挂起,以便另外一个线程可以运行
多线程:
在一个进程中,多个线程可以同时进行
多线程是实现了并发机制的一种有效手段,一个进程中可以包含多个线程,不同线程之间是可以资源共享的,同时运行可以提高程序的执行效率,可以同时完成多个工作
【面试题】简述进程和线程之间的区别和联系
a.一个程序启动之后,肯定会启动一个进程
b.一个进程启动之后,可能会启动多个线程,但是,该进程至少需要一个线程,否则进程是没有意义的
c.多个进程之间资源不共享,多个线程之间资源共享
d.系统创建进程需要为进程重新分配系统资源,而创建线程则容易