进程和线程之间有什么区别

10 分钟阅读 1669 字 + 722 词
进程线程协程区别,什么场景使用协程
首先 进程是资源分配的基本单位,而线程是程序执行的最小单位
  • 内存 上来说,每个 进程都有自己独立的地址空间 ,创建和销毁的开销比较大,并且 进程间切换需要保存和恢复整个进程的状态 ,进程之间的切换还要 切换页表 频繁切换页表还会使得TLB缓存命中率下降 ,所以上下文切换开销比较高。而 线程共享相同的内存空间,只有自己的栈,程序计数器,方法栈 ,创建销毁开销比较小。由于 线程独占的资源比较少 所以上下文切换开销比较少。
  • 通信 上来说,进程之间相互隔离,所以 进程之间的通信 需要使用一些 特殊机制IPC ,比如管道,消息队列,共享内存等。而线程是共享相同的堆内存空间的,所以可以直接访问共享数据。
  • 安全性 上来说,一个进程的崩溃不会直接影响到其他进程的稳定性。而线程是共享相同的内存空间,一个线程的错误可能会影响整个进程的稳定性。
协程 可以理解为是一种 轻量级线程,用户态线程 协程的本质就是函数和函数运行状态的组合,就是可以暂停和恢复的函数 。其实就是我们可以在堆上模拟出一块空间,然后分配寄存器,再分配一个协程号,这个协程就算创建成功了,这个切换完全是在 用户态操作 的,不用 像线程那样陷入内核态 。操作系统是 感知不到这个协程 的, 协程的运行和调度都要由应用程序来完成 ,一个协程的yield必然对应另一个协程的resume。协程不能通过锁机制来实现同步,多协程是通过 协程队列 解决竞态问题。协程非常适合高并发,IO密集型的应用,因为可以利用io等待的时间来执行其他任务。
参考答案:
进程是资源分配的基本单位。
线程是程序执行和调度的最小单位 ,线程是进程的子任务,是进程内的执行单元。 一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享同一块内存。
资源开销:
  • 进程:由于每个进程都有独立的内存空间,创建和销毁进程的开销较大。进程间切换需要保存和恢复整个进程的状态,因此上下文切换的开销较高。
  • 线程:线程共享相同的内存空间,创建和销毁线程的开销较小。线程间切换只需要保存和恢复少量的线程上下文,因此上下文切换的开销较小。
通信与同步:
  • 进程:由于进程间相互隔离,进程之间的通信需要使用一些特殊机制,如管道、消息队列、共享内存等。
  • 线程:由于线程共享相同的内存空间,它们之间可以直接访问共享数据,线程间通信更加方便。
安全性:
  • 进程:由于进程间相互隔离,一个进程的崩溃不会直接影响其他进程的稳定性。
  • 线程:由于线程共享相同的内存空间,一个线程的错误可能会影响整个进程的稳定性。
对于, 线程相⽐进程能减少开销 ,体现在:
  1. 线程的创建时间⽐进程快,因为进程在创建的过程中,还需要资源管理信息,⽐如内存管理信息、⽂件管理信息,⽽线程在创建的过程中,不会涉及这些资源管理信息,⽽是共享它们;
  2. 线程的终⽌时间⽐进程快,因为线程释放的资源相⽐进程少很多;
  3. 同⼀个进程内的线程切换⽐进程切换快,因为 线程具有相同的地址空间(虚拟内存共享) ,这意味着 同⼀个进程的线程都具有同⼀个⻚表 ,那么在 切换的时候不需要切换⻚表 。⽽ 对于进程之间的切换,切换的时候要把⻚表给切换掉,⽽⻚表的切换过程开销是⽐较⼤的;
  4. 由于同⼀进程的各线程间共享内存和⽂件资源,那么在线程之间数据传递的时候,就不需要经过内核了,这就使得线程之间的数据交互效率更⾼了;
协程的产生原因:
一是系统线程会占用非常多的内存空间,二是过多的线程切换会占用大量的系统时间。
协程运行在线程之上,当一个协程执行完成后,可以选择主动让出,让另一个协程运行在当前线程之上。 协程并没有增加线程数量,只是在线程的基础之上通过 分时复用 的方式运行多个协程 ,而且 协程的切换在用户态完成 ,切换的代价比线程从用户态到内核态的代价小很多。
实际上协程并不是什么银弹,协程只有在 等待IO 的过程中才能 重复利用 线程,上面我们已经讲过了,线程在等待IO的过程中会陷入阻塞状态,意识到问题没有?
假设协程运行在线程之上,并且协程调用了一个阻塞IO操作,这时候会发生什么?实际上操作系统并不知道协程的存在,它只知道线程, 因此在协程调用阻塞IO操作的时候,操作系统会让线程进入阻塞状态,当前的协程和其它绑定在该线程之上的协程都会陷入阻塞而得不到调度,这往往是不能接受的。
因此在协程中不能调用导致线程阻塞的操作。也就是说, 协程只有和异步IO结合起来,才能发挥最大的威力。
协程相当于是一个用户级线程
CPU 寄存器和程序计数器 是 CPU 在运⾏任何任务前,所必须依赖的环境,这些环境就叫做 CPU 上下⽂
进程的上下⽂切换不仅包含了虚拟内存、栈、全局变量等⽤户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。