进程和线程的区别
进程
资源分配的最小单元
线程
程序执行的最小单元
系统分配处理器时间的基本单元
线程和进程的区别
堆栈空间
进程:拥有他自己的堆栈空间和他的一个数据段的。
如果说我们去启动一个新的进程的时候,我们必须给他分配一个独立的地址空间。然后建立一些数据表来维护他的代码段比如说堆栈段或者数据段。所以我们进程的系统开销是比较大的。
线程:拥有自己的独立的堆栈空间,但是他的数据段是共享的。
他们可以使用一样的地址空间去共享数据。那么他的开销将比我们的进程更加小。而且线程的切换速度是要比进程快的。
安全性
但是我们进程的安全性会比我们的线程高一些。因为我们进程他会有一个独立的地址空间。如果说我们的进程崩溃了,那么我们在保护模式下面他不会对其他进程产生影响的。
通信机制
从通信机制层面来说,我们进程之间的通信会比较复杂,比如说我们可以基于管道、基于信号、基于消息队列或者共享内存或者说套接字等等等等。我们要利用这些去建立我们的通信机制。
但是线程则比较简单,可以去共享我们的数据段,所以从通信机制方面来说,我们的线程是更加的方便。
什么时候使用进程和线程
如果需要频繁的创建和销毁,那么应该优先使用线程。
因为进程的这两个操作,代价非常大,并且线程的切换速度比较快。
如果我们需要并行地操作,那我们使用线程会比较好。
如果说我们需要一个稳定的安全的状态,这个时候我们就适合选用我们的进程。需要速度,那么就需要选用我们的线程。
线程和进程之间的关系
线程只能是属于我们的一个进程,但是一个进程可以有多个线程。但至少需要有一个线程。因为线程是我们操作系统可以识别的最小执行调度单元。
多线程一般用在哪些方面
用于高并发的一些地方,比如说我们有两个任务,一个任务A和一个任务B,如果说任务A和任务B是没有关联的。那么我们使用单个线程,得先处理完A才能处理B。但如果我们执行的是多线程,那么我们就能同时执行A和B。
多线程的优点
- 线程可以把我们占据时间长的一些任务放到后台去处理。他不会影响我们主线程的使用。
- 他可以使我们整个程序运行速度更快。
- 多线程可以交替去执行。
多线程的缺点
- 线程数过多的话,上下文时间切换的影响较大。
- 每个线程都会占用我们的内存资源,如果说我们的线程数越多的话,我们占用的内存资源也就会越多。
- 给程序带来一些意想不到的错误,包括对共享变量的操作和一些问题的排查也会变得复杂。
参考资料:字节一面——说下进程和线程的区别?