文章目录
一、线程是什么?

在一个进程中,可以有多个指令序列在执行,这些指令序列共享进程的资源(进程代码、进程数据、进程映射表等)。这些进程中的多个执行的指令序列称为线程。线程相比进程更轻量化,启动更快,且线程之间的切换更加容易,因为线程之间的切换只用切换指令序列,内存映射表不变,而进程之间的切换要切换内存映射表。
二、 用户级线程的切换

网页浏览器访问网站时会启动多个线程,比如一个线程向站点服务器请求数据,一个线程将数据显示在页面上。上图代码创建了两个线程,分别用于实现这两种功能。要想实现(伪)并发需要将线程交替执行,在用户态下这种交替执行通过调用yield函数执行。
1. yield函数如何实现切换?
用堆栈

如果两个执行序列用一个堆栈,首先A函数中调用B函数,先将地址104压入堆栈,接着跳转到B函数执行。在B函数中调用Yield()切换线程,则将地址204压入堆栈,跳转到C函数执行。C函数中调用D函数时,将地址304压入堆栈,跳转到D函数执行。在D函数中调用Yield()切换线程时,假定Yield函数能找到跳回上个线程所需的地址204,但在跳回去后,B

本文详细介绍了线程的概念,并重点探讨了用户级线程的切换,包括yield函数的工作原理、线程创建过程以及用户级线程的特点。同时,解释了核心级线程的必要性,分析了它们与用户级线程的区别,以及从用户栈到内核栈切换的具体步骤。文章还讨论了内核栈的创建和用户级线程与核心级线程的对比。
最低0.47元/天 解锁文章
2966

被折叠的 条评论
为什么被折叠?



