01-实现多线程切换和调度实验介绍(协程原理)

本系列文章旨在记录完成一个小型用户级线程创建、切换与调度框架的过程,并不能代替操作系统为我们提供的线程框架。

为什么要写这样的东西呢?目的很简单,仅仅在于学习操作系统中的进程或线程切换与调度原理。所以,请不要把代码试图用到你的工程或者项目中,出了问题也不要来找我啊。

如果你发现该项目中存在的问题或 bugs,请不要吝啬,及时联系我,因为我也只是一个学习者,希望共同进步。

[注]

重要提示:请不要忘记给项目点 star 啊!!!还有一点,代码中可能存在 bug,请不要忘记在博客后面评论。


应该说一直以来,我们学习线程切换与调度,都是通过阅读操作系统书籍或 Linux 源码甚至反汇编 Window 内核代码。无论怎样,这些东西都很抽象,学习起来十分困难。

本系列文章,准确的说是实验指导书吧,会带你循序渐近的掌握下面的知识点:

  • 控制流如何切换
  • 完成一个简单的暴力跳转
  • 封装 create_thread 函数
  • 抽取调度函数
  • 模块化项目
  • 封装阻塞类函数,以 sleep 函数为代表
  • 时钟与时间片概念
  • 为线程添加时间片
  • 时间片轮转+优先级调度

注意上面不是目录,只是我们将要遇到的一些关键节点。最后,我们实现的效果应该是下面这个样子:


这里写图片描述
图1 最终的效果

客户端完整代码见图 2.

需要注意的是,上面的代码,并没有使用操作系统为我们提供的 pthread 系列函数,thread_create 和 thread_join 函数都是自己纯手工实现的。唯一使用操作系统的函数就是设置时钟,因此会有时钟信号产生,这一步是为了模拟时间片轮转算法而做的。

接下来,废话不多说了,开启新篇章吧《控制流切换原理》;


这里写图片描述
图 2 使用自己的编写的多线程框架创建线程

猜你喜欢

转载自blog.csdn.net/q1007729991/article/details/60104151