进程和线程的十条区别
我们先来说说引入线程这个概念的好处
我们说为什么有了进程,还要有线程呢???
进程可以使多个程序并发执行,以提高资源的利用率和系统的吞吐量。 但是:进程在同一时间只能做一件事。
进程在执行的过程中如果阻塞,整个进程就会挂起,即使进程中有些工作不依赖于等待的资源,仍然不会执行。
因此,操作系统引入了比进程粒度更小的线程,作为并发执行的基本单位,从而减少并发执行时所付出的时空开销,提高并发性。
从以下几个方面,阐述线程的优势:
从占用资源上讲
线程是一种非常节俭的多任务操作方式。在linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它 的代码段,堆栈段和数据段,这是一种非常昂贵的多任务工作方式。
从通信机制上来看
线程间有方便的通信机制。对不同进程来说,它们具有独立的数据空间。
要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时间还不方便。线程则不然,由于同一进程下的线程之间共享相同空间,所以一个线程的数据可以直接被其他线程所用。不仅速度快还便捷。
从切换效率上来讲
线程之间彼此切换所需时间远远小于进程间所需要的时间,一个进程的开销大约是一个线程的30倍左右。
除了以上三方面,多线程作为一种多任务,并发的工作方式,还有如下优点:
1 使用CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时候,不同的线程运行于不同的CPU上。
2 改善程序结构,一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的 运行部分,这样的程序才会利于理解和修改。
这里我们可以具体的讲一讲进程和线程的区别了
进程:
1 进程是CPU资源分配的最小单位。
2 进程有独立的系统资源。拥有独立的内存单元。
3 一个进程崩溃,不会影响其他进程。
4 进程在创建,切换和销毁时候开销比较大。进程创建的时候需要分配系统资源( 内存空间,I/O设备 )。而销毁的时候需要释放系统资源。
5 进程切换 涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。
需要两步:第一步:切换页目录,刷新TLB以使用新的地址空间。第二步:切换内核栈和硬件上下文(寄存器)。
6 进程间通信比较复杂。进程间通信IPC
7 一个进程可以有无数个线程。
8 进程编程调试简单可靠性高,但是创建销毁开销大。
9 进程间不会相互影响。
10 进程适用于多核,多机分布。
线程:
1 线程是CPU调度的最小单位。
2 同一进程内的 线程 共享进程的大部分系统资源,包括堆,代码段,数据段。每个线程只独立拥有一些在运行中必不可少的私有属性,比如tcb,
线程id,栈,寄存器, 每个线程拥有还自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
3 一个线程崩溃,会让同一进程内的线程也死掉。
4 进程在创建,切换和销毁时候开销比较小。线程切换只保存和设置少量寄存器的内容,不涉及存储器管理。
5 同一进程间的线程间逻辑地址空间是一样的,不需要切换页目录,刷新TLB。
6 因为线程间通信比较容易,因为它们具有相同的地址空间,共享代码段和数据段。它们之间的同步和通信变得比较容易。线程间可以直接读写进程数据段(如全局变量)来进行通信———需要进程同步和互斥手段的辅助,以保证数据的一致性。在有的系统中,线程的切换,同步和通信都无需操作系统内核的干预。
7 一个线程只属于一个进程。
8 线程创建开销小,切换速度快,但是编程调试相对复杂。
9 一个线程挂掉,导致整个进程挂掉。
10 线程适于多核。