进程、线程、协程通俗简述

17 阅读3分钟

个人通俗理解

首先,把电脑系统(无论是windows还是linux亦或者ios),都看成是一家集团,然后,该集团名下有非常多的子公司

进程:在这个集团中,就是这些相互独立运作的子公司。
  • 它会有独属于该公司的财务、人事、研发等等 --------(独立的内存空间、系统资源,如文件、网络连接等)。
  • 这些子公司它们互不干扰,想合作就得走正式流程--------(进程间的通信需要特殊机制,如管道、套接字等)。
  • 如果一个子公司挂了,只要不影响到集团重大利益,其它公司是不会受其影响的----------(大多数情况下直接关闭某个进程是不会影响其它进程的,除非该进程与其它进程有重要通信)。
线程:在这个集团中,是子公司里的每一个单独的员工-----(一个进程可以有许多线程)。
  • 员工共享公司的公共资源,如网络、饮水机。---------(它自身不拥资源,但与其它线程共享单个进程中的内存空间和系统资源)
  • 但员工也有自身相对独立的工具,如公司分配的电脑。-------(线程是不拥有资源,但它有自身的上下文,切换受系统控制)
  • 一个公司中的员工众多,所以就可以同时处理很多不同的业务,甚至处理同一个业务。-------(多线程并行)
  • 只是,多个员工在处理同一个业务时,难免有分歧,这里就需要直接当面沟通决定谁去解决。--------(线程数据共享容易,所以难免出现资源竞争问题,这情况下就可以考虑用锁--即让单个员工去处理别人不许插手)
协程:子公司里的卷王、超级牛马、时间管理大师------(具备多种能力的员工,如全栈)
  • 该员工具备很强的能力,可以独立完成一个功能、甚至项目的开发,做着前端的时候感觉数据不对,就暂停并切换到后端改数据,再回去改前端。---------(协程调度可完全由开发者控制,而非靠系统)
  • 这种在开发上的自由度,完全不需要公司,更不需要集团去插手。-------(协程高效率)
  • 这种员工甚至还能喝口水,看看公司网络怎么又不行了,最后再上去服务器溜达溜达看看有没有哪个衰仔在搞事情等等。-------(协程在单线程内的自我调度)
  • 然后这种员工还不止一个,他们不仅可以相互之间换着搞,你去请假他就去加班,还可以同时搞一样,你做前端,他也搞前端只需要一个git管理就行。-------(协程在单线程内通过协作式调度实现并发)

一句话总结:

  • 进程:独立的公司,互不干扰。
  • 线程:公司里的打工人,合作但可能吵架。
  • 协程:时间管理大师,一人分饰百角。

一丢丢专业些解释:

  • 进程:程序运行产生的实体,是系统进行资源分配的基本单位,是操作系统的基础,也是线程的容器。拥有独立的内存空间和系统资源,文本域、数据域和堆栈。
  • 线程:是操作系统能够进行运算调度的最小单位,是进程的实际运作单位。共享进程的内存和资源。一个进程可以有多个线程,线程之间切换成本低。
  • 协程:比线程更轻量级的用户级任务,由程序员控制切换(而非操作系统)。协程在单线程内通过协作式调度实现并发,适合高并发、I/O密集型任务。