什么是进程?
- 进程是资源分配的基本单位
- 有自己独立的虚拟地址空间,在系统上运行的东西,都可以称为进程, 占用系统的资源 如cpu、物理内存。
什么是程序?
- 程序是进程指令的集合,可以启用一个进程或者多个进程,占用磁盘空间,不占用系统资源。
什么是线程?
- 在Linux上线程是特殊的进程,是轻量级的进程
- 线程是资源调度的基本单位
- 每个线程都有独立的程序计数器,线程栈和一组线程寄存器,内核调度的是线程。
- 线程是进程的子集,一个进程里可以有很多的线程,每条线程可以并行执行不同的任务。在同一进程内的所有线程共享同一片内存空间,但每个线程都有自己的独有栈内存 来存储自己的栈信息,在多个cpu下可以允许多个线程同时并行执行。
进程和线程的区别:
- 独立的虚拟地址空间、其他的资源:进程间是相互独立的,同一个进程的多个线程可以共享这些资源。
- 调度和切换:线程的上下文切换比进程的上下文切换快很多,线程的创建也比进程快很多,但是进程的管理波线程的管理方便、容易。
- 通信:进程间通信 通过 管道、信号量、共享内存、消息队列 、socket 线程间的通信可以通过读写数据变量来进行通信,需要保持数据的安全性,通过互斥锁和条件变量来实现。
根据不同的场景使用进程还是线程:
- 需要频繁的创建销毁的优先考虑线程(线程池),线程的创建和销毁的比进程的代价小的多
- 需要提高并发,优先使用线程,并行操作,多个cpu下允许多个线程并行执行
- 线程的切换速度比进程快
- 需要考虑程序的健壮性,优先使用进程,一个线程崩了,对应的进程就会挂掉,Nginx里使用的是多进程。