1.基本概念:
进程:
具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。 例如,用户运行 自己的程序,系统就创建一个进程,并为它分配资源(包括各种表格、内存空间、磁盘空间、I/O设备等),然后该进程就被放 入到进程的就绪队列,进程调度程序选中它,为它分配CPU及其他相关资源,该进程就被运行起来。
线程:
是进程的一个实体,是CPU调度和分配的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源 (如:程序计数器、一组寄存器和栈),但是它可以与同属一个进程的其他的线程并享进程所拥有的全部资源。
注:
在没有实现线程的操作系统中,进程既是资源分配的基本单位,又是调度的基本单位,是系统并发执行的单元。
而在实现了线程的操作系统中,进程是资源分配的基本单位,线程是调度的基本单位,是系统并发执行的单元。
名称 | 描述 |
---|---|
程序 | 一组指令的有序组合 |
进程 | 具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单元 |
线程 | 进程的一个实体,是CPU调度和分派的基本单元,是比进程更小的能独立运行的基本单元。本身基本上不拥有系统资源, 只拥有一点在运行中必不可少的资源(如:程序计数器、一组寄存器和栈)。一个线程可以创建和撤销另一个线程,同 一个进程中的多个线程之间可以并发执行。 |
简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
2.多线程:
概念:多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行。即
是单CPU的计算机,也可以通过不停地在不同线程的指令间切换,从而造成多线程同时运行的效果。
流程:
main()到func3()再到main()构成一个线程,此外func1()和func2()构成另外两个线程。操作系统一般都有一些系统调用来让你将一个函数运行成为一个新的线程,如下图示:
实现:
一个栈,只有最下方的帧可被读写。相应的,也只有该帧对应的那个函数被激活,处于工作状态。为了实现多线程,我们必须绕开栈的限制。为此,创建一个新的线程时,我们为这个线程建一个新的栈。每个栈对应一个线程。当某个栈执行到全部弹出时,对应线程完成任务,并收工。所以,多线程的进程在内存中有多个栈。多个栈之间以一定的空白区域隔开,以备栈的增长。每个线程可调用自己栈最下方的帧中的参数和变量,并与其它线程共享内存中的Text,heap和global data区域。对应上面的例子,我们的进程空间中需要有3个栈。
(要注意的是,对于多线程来说,由于同一个进程空间中存在多个栈,任何一个空白区域被填满都会导致stack overflow)
本文介绍了程序、进程、线程的概念以及区别,并讲解了多线程的原理、流程及实现机制···