当前位置: 首页 > 科技观察

进程、线程、协程

时间:2023-03-21 17:59:58 科技观察

不管我们写什么样的程序,最后都是操作系统运行我们的程序,而操作系统是如何管理我们的程序,我们程序的数据是如何保存和计算的,这些他们都是操作系统需要处理的事情。我们只需要将编写好的程序交给操作系统即可。操作系统虽然可以帮我们做很多事情,但它并不是万能的。有时我们需要告诉它如何处理它,或者我们需要按照它的规则来做事。操作系统的本质功能是管理和调度内存和cpu。进程进程是操作系统分配资源的最小单位,也就是说我们写的每一个程序都至少包含一个进程,当然也可能包含多个进程。在这个过程中,我们有自己的资源管理,可以申请内存,可以进行数据计算。这些都是流程需要处理的事情。既然线程有进程,为什么还要线程呢?因为进程切换太耗资源了。我们知道,一个事物或者一个方法的出现,一定是为了解决某个问题或者某些问题。线程的出现就是为了方便操作系统的调度。因此,线程是操作系统调度的最小单位。一个进程中可以有一个线程,也可以有多个线程。多个线程之间各干各的,但是共享进程的存储空间,也就是说都可以访问进程的内存空间。这样做的好处是方便线程通信,缺点也很明显。如果多个线程同时要修改共享内存的数据,就会发生竞争,而锁机制就是解决共享内存的线程之间修改共享内存问题的一种方法。携程进程的创建需要的资源是最多的,线程需要的资源比它小很多,但是大家似乎还是不满意,于是诞生了协程,它需要的资源更少,只有几kb,也就是说,一个普通的主机也可以轻松启动数十万个协程。我们之前说过,进程是CPU分配资源的最小单位,线程是CPU管理的最小单位。那么协程CPU是怎么管理的呢?答案是操作系统CPU不直接管理协程,而是由用户自己管理。因此,我们经常称协程为用户态线程。由于协程是由用户管理的,所以我们可以根据需要在不同的协程之间进行切换。例如,当一个协程遇到一个耗时的io操作时,我们可以将CPU资源切换到其他协程。这样我们就可以大大提高cpu的利用率。协程虽然很方便,但是用户需要自己实现一个处理器调度机制,因为他们需要自己管理状态切换。这其实并不简单,这也是为什么最近知道很多语言都实现了协程的原因。总结不管是进程、线程还是协程,它们统称为资源块和代码块,可以被CPU调度。不同之处在于CPU如何调度它们。操作系统通过进程和线程的管理来处理CPU调度。操作系统封装了进程和线程的实现。我们需要做的就是让我们的程序尽可能合理地分配处理器资源。当我们理解了这一点,我们就更加关注进程之间如何通信,线程与进程之间如何通信,协程之间如何通信。这些其实也是我们在编码过程中比较关注的。