天天看点

进程和线程区别?什么时候用线程、进程

————————————————————————————————·

首先要明确一点:**进程的定义,线程的定义?**

进程:是计算机中程序关于某个数据集合的一次运行活动;

线程:是程序执行流的最小单元;

从定义当中可以看出,进程之下有线程,也就是说,一个进程至少有一个线程,同时一个线程只能属于一个进程。

那么,线程就是进程的一个实体。

**笔者是这样理解二者之间的关系:**大家还记得大象装冰箱的故事吗?CPU就相当于冰箱,大象就像一个进程。当然执行起来确实只分三步,但是直接放进冰箱操作性不高,且甚至多数时候不具备可操作性吧,即便直接装在一个冰箱,冰箱内空间是不是浪费了很多呢?但是如果有一把刀子(刀子切的肉块可以比作一个线程),将大象分块后再装入,使得冰箱内部空间得到有效利用,且放进冰箱的效率提高呢?这确实需要预处理的工作,但是大家想想,做任何事之前,准备的越好,做起来不就越轻松吗?

**线程和进程的区别:**

1、从占用内存空间以及cpu利用率分许:

进程在生命周期开始,也就是创建后,系统就会分配独立的堆栈段和数据段,所以每个进程都会有独立的地址空间。那么各位会不会想到,当建立许多的代码段、数据段和堆栈段是不是很浪费空间呢?

。而线程则不同,线程创建后,拥有独立的堆栈空间,但是会共享数据段。并且线程之间使用相同的地址空间,共享大部分数据,相比于进程那是相当节省了,由此可以看来,线程体积小,占用内存小,开销也就小,切换方便,那么cpu利用率就大大提高啦。

2、从安全性,和复杂度方面分析:

正式由于进程之间相互独立,独立的地址空间,使得进程之间很安全,一个进程崩溃时候,并不会影响另一个进程。然后通信机制就较为复杂了,

有管道、信号量、消息队列、共享内存和套接字等的通信机制(有这么多的通信方式,可见复杂)。线程共享数据段,且使用相同的地址空间。使得线程直接并不安全,当一个线程崩溃,必然影响其他线程,使得整个进程崩溃。然而正是由于线程存在共享机制,使得线程之间必然通信机制很方便。

**什么时候使用进程,什么时候使用线程呢?**

在各位浏览到这里时候,读者应该想到了几点什么时候使用进程,什么时候使用线程;

 1. 当频繁创建和销毁的时候,当然是线程,创建进程需要的代价相比于线程是高出很多的。

 2. 当考虑的安全性的问题时候,是进程

 3. 提高cpu利用率,是线程,也就是多核分布式,多机分布用进程

 4. 并行操作时,是线程。

 5. 需要频繁切换,且大量计算时用线程同时耗时的操作使用线程可以提高应用程序的响应。

----------

------------------------------------------------------------------------·

笔者初次发帖,有各个方面的不足,请见谅;

理解错误的地方请指正,笔者会虚心接收。                

谢谢观看

继续阅读