c:线程与进程

进程概念:

进程是一个程序的一次执行的过程。当一个程序开始执行后,在执行开始到执行完毕退出这段时间里,它在内存中的部分就被称作一个进程。

另附:

进程与程序的区别

(1)程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念 

(2)进程是动态的,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程

进程的组成: 

程序:可执行代码,描述了程序的功能

数据:进程的操作对象,同一段程序在不同数据集上的执行过程是不同的进程。

PCB(进程控制块)PCB是系统对进程的唯一标识

进程的三种状态: 

一个进程具有以下三种状态。

 执行态(Running) :进程正在占用 CPU。

 就绪态(Ready):    进程已经具备执行的一切条件,正在等 待分配 CPU 的处理时间片。

 阻塞态(Blocked)正在执行的进程,由于等待某个事件的发生而无法执行时,便放弃处理机而处于阻塞状态。

进程调度:

在多进程并发的环境里,从概念上看,有多个进程在同时执行,具体到单个CPU,实际上任何时刻只能有一个进程处于执行状

态;因此OS(Operating system)需要决定哪个进程执行,哪些进程等待,也就是进程的调度。

孤儿进程与僵尸进程:

孤儿进程:

(1)概念:父进程先于子进程结束,那么子进程就变成了“孤儿进程(守护进程);

(2)Linux系统规定:所有的孤儿进程会自动成为一个特殊进程(进程1,也就是init进程)的子进程。

僵尸进程:

(1)概念:已经执行结束,不占用系统资源,但是未从进程条目表中删除的子进程。僵尸进程太多会导致进程表满,进而导致                       系统崩溃。

(2)僵尸进程需要它的父进程来为它收尸,如果他的父进程没调用waitwaitpid()等待子进程结束,那么它就一直保持僵尸状              态,如果这时父进程结束了,那么init进程自动 会接手这个子进程,为它收尸,它还是能被清除的。

(3)如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是为什么系统中有时会有很多的僵尸进程

线程概念:

线程是指进程中的一个执行流程,一个进程中可以运行多个线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。

线程可以在处理器上独立调度执行,这样,在多处理器环境下就允许几个线程各自在单独处理器上进行。操作系统提供线程就是

为了方便而有效地实现这种并发性。

线程的优点:

(1)易于调度。

(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。

(3)开销少。创建线程比创建进程要快,所需开销很少。

(4)利于充分发挥多处理器的功能。通过创建多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,使每            个处理器都得到充分运行。

进程和线程的关系总结:

(1)线程就相当于在进程中的一个一个的函数

(2)线程是依附于进程存在的

(3)我们默认程序开始运行只有一个进程,只有一个线程

(4)使用pthread_create在进程中创建一个线程

         注意:编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库 libpthread.a.

         如: gcc main.c -lpthread -o main

(5)一个线程的结束并不会影响其他的线程和进程的结束

(6)线程是进程的一个实体,是CPU调度和分派的基本单位

         进程是资源分配的最小单位

猜你喜欢

转载自blog.csdn.net/xutong98/article/details/81543667