进程线程协程的区别

题目来源:字节跳动

答案:

线程和进程之间的区别

  1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
  2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
  3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
  4. 调度和切换:线程上下文切换比进程上下文切换要快得多

线程和协程之间的区别

  1. 从占用资源的角度来说:线程大小初始一般为为1M,协程为2KB,可随需要增大
  2. 线程是由OS内核完成调度,协程是由用户完成
  3. 切换的开销:线程切换涉及模式切换(从用户态切换到内核态)、16个寄存器、PC、SP…等寄存器的刷新等;协程只有三个寄存器的值修改 - PC / SP / DX.
  4. 线程资源占用太高,频繁创建销毁会带来严重的性能问题;协程资源占用小,不会带来严重的性能问题
  5. 在数据的同步上:线程需要用锁等机制确保数据的一直性和可见性;协程不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。