线程、进程的区别、优缺点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线程、进程的区别、优缺点
进程的特点:每⼀个进程都有⾃⼰的独⽴的⼀块内存空间、⼀组资源系统。
其内部数据和状态都是完全独⽴的。
进程是操作系统进⾏资源分配的基本单位;
线程是操作系统进⾏调度的基本单位。
同⼀进程下的线程不仅共享进程资源和内存,每个线程还可有⼀个属于它⾃⼰的内存空间——线程栈。
以下4⾏是我能理解的范围:
多线程的优点:线程间切换快,共享数据,多核cpu利⽤率
多线程的缺点:多线程同步、加锁控制较负责;
多进程的优点:独⽴
多进程的缺点:调度开销⼤
====结==束=============结==束============结==束===============================================
可以参考的:
多线程的优点:
⽆需跨进程边界;
程序逻辑和控制⽅式简单;
所有线程可以直接共享内存和变量等;
线程⽅式消耗的总资源⽐进程⽅式好;
多线程缺点:
每个线程与主程序共⽤地址空间,受限于2GB地址空间;
线程之间的同步和加锁控制⽐较⿇烦;
⼀个线程的崩溃可能影响到整个程序的稳定性;
到达⼀定的线程数程度后,即使再增加CPU也⽆法提⾼性能,例如Windows Server 2003,⼤约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;
线程能够提⾼的总性能有限,⽽且线程多了之后,线程本⾝的调度也是⼀个⿇烦事⼉,需要消耗较多的CPU
多进程优点:
每个进程互相独⽴,不影响主程序的稳定性,⼦进程崩溃没关系;
通过增加CPU,就可以容易扩充性能;
可以尽量减少线程加锁/解锁的影响,极⼤提⾼性能,就算是线程运⾏的模块算法效率低也没关系;
每个⼦进程都有2GB地址空间和相关资源,总体能够达到的性能上限⾮常⼤
多进程缺点:
逻辑控制复杂,需要和主程序交互;
需要跨进程边界,如果有⼤数据量传送,就不太好,适合⼩数据量传送、密集运算
多进程调度开销⽐较⼤;
如果多个线程要同时访问某个资源,怎么处理(java)?
多线程的性能⼀定就由于单线程呢?
不⼀定,要看具体的任务以及计算机的配置。
⽐如说:对于单核CPU,如果是CPU密集型任务,如解压⽂件,多线程的性能反⽽不如单线程性能,因为解压⽂件需要⼀直占⽤CPU资源,如果采⽤多线程,线程切换导致的开销反⽽会让性能下降;但对于⽐如交互类型的任务,肯定是需要使⽤多线程的。
对于多核CPU,对于解压⽂件来说,多线程肯定优于单线程,因为多个线程能够更加充分利⽤每个核的资源。
进程的优点是提⾼CPU运⾏效率,在同⼀时间内执⾏多个程序,即并发执⾏。
但是从严格上讲,也不是绝对的同⼀时刻执⾏多个程序,只不过CPU在执⾏时通过时间⽚等调度算法不同进程⾼速切换。
每个⼦进程都只有⼀个⽗进程。
1、操作系统在执⾏⼀个程序时,会⾃动建⽴⼀个‘进程’,这个进程中,⾄少包含⼀个线程(这个线程被称为主线程),来作为程序⼊⼝。
2、操作系统运⾏中,会产⽣很多个‘进程’,这些进程不共享内存;⽽每个进程占有的内存,却可以被这个进程中不同的‘线程’所共享;另外,这些线程不仅共享这段内存,每个线程还可有⼀个属于它⾃⼰的内存空间——线程栈,这是线程建⽴时,操作系统分配的,⽤来保存线程数据。
3、线程总是属于某个进程,进程中的多个线程共享进程的内存。
4、进程被分为多个线程后,这些线程可以并发执⾏。
线程的概念:⼀个线程是进程的⼀个顺序执⾏流。
同类的多个线程共享⼀块内存空间和⼀组系统资源,线程本⾝的数据通常只有CPU的寄存器数据,以及⼀个供程序执⾏时的堆栈。
线程在切换时负荷⼩,因此,线程也被称为轻负荷进程。
⼀个进程中可以包含多个线程。
参考资料。