前言
线程分为用户级线程和内核级线程,这节我们先来讨论一下何为用户级线程以及用户级线程的底层原理。
用户级线程和内核级线程
说到用户级多线程,我们有必要先来简单对比一下用户级线程和内核级线程之间的区别。
内核级线程,顾名思义,它的调度是依赖于操作系统的,即操作系统控制着内核级线程的切换,比如有A和B两个内核级线程,我们用户是不知道先执行哪个线程的代码和不知道什么时候切换到另一个线程执行代码的,这件事只有操作系统知道,我们无法干预。
用户级线程,顾名思义,它的调度是依赖于用户的想法的,比如有C和D两个用户级线程,我们用户可以先让A执行一段代码后,然后手动控制让其跳到B去执行一段代码,我们是清楚知道线程间的切换的。
简单一句话来说就是:内核级线程是由操作系统进行调度的,用户级线程是由用户来控制调度的。
用户级线程
我们举例子,来进一步说明用户级线程切换的底层原理,还是记住那句话:用户级线程的切换是由我们用户来主动控制的。
现在我们假设有线程1和线程2两个线程(图中红色的数字为内存的地址)
可以看出,线程1中有A()和B()两个函数,执行流程为A()函数调用B()函数,B()函数执行完毕后返回到地址为104的语句继续往下执行;线程2中有C()和D()两个函数,执行流程为C()函数调用D()函数,D()函数执行完毕后返回到地址为304的语句继续往下执行。那么图中还有一个Yield()函数到底是什么东西呢,简单来说它就