协程、线程、进程

前言:

    协程、线程和进程,可以说是面试必问,开发必接触的问题了,有必要系统性地认识和理解它们。

协程:

游戏开发中,协程一般分为2种,一种是Unity的协程,一种是Lua的协程。Unity的协程可以参考我之前写的一篇文章 Unity的协程。主要实现方式是利用C#的IEnumerator和Unity的Update()函数,在Unity的主线程中去检测和执行协程。Lua协程的特点是一个Lua状态机里,在任何时刻都只能运行一个协程,也就是说Lua的协程不存在并发的情况。一个协程运行后,只有运行结束或者挂起,下一个协程才能得以运行。所以协程也不具有抢占式。

协程从某个角度来讲它就像是和硬件,资源,操作系统无关,由语言或引擎自身实现的逻辑分流,例如C++,C#是没有协程的,而Unity和Lua实现了自己的协程。

协程的特点是切换速度快,性能消耗小。

线程:

定义:操作系统能够进行运算调度的最小单位。

线程存在于进程中,是进程中实际运行的单位。一个线程是一个顺序执行流,线程与线程之间存在异步性和抢占性。同个进程里面的多个线程,共享进程的系统资源,同时线程也拥有自己的独立堆栈。

线程相对于进程来说,线程间切换的性能消耗较小,

线程与线程之间是异步的。

进程:

定义:是系统进行资源分配和调度的基本单位。(注意:进程是分配,线程是调用)

。一般来说,一个应用程序占用操作系统的一个进程。进程的上下文切换比较复杂,性能消耗大。(上下文切换:一个进程在操作系统上运行,需要先把相关的数据写入到CPU寄存器中,切换进程时,需要将当前进程的数据从CPU寄存器中移走,保存在自己进程的存储空间里,然后把将要运行的线程数据存储到CPU寄存器中,这个过程成为上下问切换。)

在多线程操作系统中,一个进程可以包含多个线程。

发布了53 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/PresleyGo/article/details/104050968