进程:具有一定独立功能的程序,他是系统进行分配资源和调度的一个独立单位,也就是说进程是一个程序的动态过程
线程:线程是进程的一个实体,是cpu独立运行和调度的基本单位,由于线程比进程更小基本上不拥有系统资源,所以它的调度所付出的开销小很多,更高效的提高系统内多个程序间并发执行的程度。
区别:1.多个线程共享数据空间,子进程和父进程有不同的代码和数据空间
2.通信:进程间通信IPC,线程间可以直接进行读写进程数据段(如全局变量),进程通信---需要进程同步和互斥手段的
辅助,以保证数据的一致性。
3.进程是资源分配的独立单位,线程是独立运行和调度的基本单位。
4.拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
5.系统开销:在创建或撤销进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤销线程时的开销
在学习线程过程中总会听到 互斥 与 同步 经济搞不清他们的概念 分不清 那个是哪个 所以记下
1、线程(进程)同步的主要任务
答:在引入多线程后,由于线程执行的异步性,会给系统造成混乱,特别是在急用临界资源时,如多个线程急用同一台打印机,会使打印结果交织在一起,难于区分。当多个线程急用共享变量,表格,链表时,可能会导致数据处理出错,因此线程同步的主要任务是使并发执行的各线程之间能够有效的共享资源和相互合作,从而使程序的执行具有可再现性。
2、线程(进程)之间的制约关系?
当线程并发执行时,由于资源共享和线程协作,使用线程之间会存在以下两种制约关系。
(1)间接相互制约。一个系统中的多个线程必然要共享某种系统资源,如共享CPU,共享I/O设备,所谓间接相互制约即源于这种资源共享,打印机就是最好的例子,线程A在使用打印机时,其它线程都要等待。
(2)直接相互制约。这种制约主要是因为线程之间的合作,如有线程A将计算结果提供给线程B作进一步处理,那么线程B在线程A将数据送达之前都将处于阻塞状态。
间接相互制约可以称为互斥,直接相互制约可以称为同步,对于互斥可以这样理解,线程A和线程B互斥访问某个资源则它们之间就会产个顺序问题——要么线程A等待线程B操作完毕,要么线程B等待线程操作完毕,这其实就是线程的同步了。因此同步包括互斥,互斥其实是一种特殊的同步。
3、临界资源和临界区
在一段时间内只允许一个线程访问的资源就称为临界资源或独占资源,计算机中大多数物理设备,进程中的共享变量等待都是临界资源,它们要求被互斥的访问。每个进程中访问临界资源的代码称为临界区。