1、进程、线程区别
计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。
1)进程
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
进程一般由程序、数据集合和进程控制块三部分组成。PCB是进程存在的唯一标准。
a、程序用于描述进程要完成的功能,是控制进程执行的指令集;
b、数据集合是程序在执行时所需要的数据和工作区;
c、程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标志。
2)线程
线程,有时被称为轻量级进程(Lightweight Process,LWP),是操作系统调度(CPU调度)执行的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程的好处:
a、易于调度。
b、提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
c、开销少。创建线程比创建进程要快,所需开销很少。在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
d、利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。
总结:a、进程是资源分配和调度的基本单位;线程是调度(CPU调度)执行的最小单位。
b、一个线程只可以属于一个进程,但一个进程能包含多个线程。
c、资源分配给进程,同一进程的所有线程共享该进程的所有资源。
d、线程的开销或代价比进程的小。
3)进程间通信的方式
a、管道(pipe)及有名管道(named pipe):
管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
b、信号(signal):
信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。
c、消息队列(message queue):
消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。
d、共享内存(shared memory):
可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。
e、信号量(semaphore):
主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。
f、套接字(socket);
这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。
4)线程间的通信方式
a、同步。
b、wait/notify机制。
c、共享内存。
d、管道通信机制。
e、信号量
2、死锁
产生死锁必须同时满足以下的四个条件,只要其中一条件不满足,死锁就不会发生。
a、互斥条件:就是一个资源只能有一个进程占有,不可以被两个或者多个进程占有;
b、不可抢占条件:进程已经获得的资源在未使用完之前,不可以被抢占,只能在使用完之后自己释放;
c、请求和保持条件:进程自己已经至少保持一个资源,又请求其他资源,但是这个资源被其他进程占有,而且又不释放自己已经占有的资源
d、循环等待条件:发生死锁时,必定会形成一个进程资源的循环等待链。进程集合{p1,p2,p3}中,p1请求p2占有的资源,p2请求p3占有的资源,p3请求p1占有的资源。