1. 程式人生 > >01-實現多執行緒切換和排程實驗介紹(協程原理)

01-實現多執行緒切換和排程實驗介紹(協程原理)

本系列文章旨在記錄完成一個小型使用者級執行緒建立、切換與排程框架的過程,並不能代替作業系統為我們提供的執行緒框架。

為什麼要寫這樣的東西呢?目的很簡單,僅僅在於學習作業系統中的程序或執行緒切換與排程原理。所以,請不要把程式碼試圖用到你的工程或者專案中,出了問題也不要來找我啊。

如果你發現該專案中存在的問題或 bugs,請不要吝嗇,及時聯絡我,因為我也只是一個學習者,希望共同進步。

[注]

重要提示:請不要忘記給專案點 star 啊!!!還有一點,程式碼中可能存在 bug,請不要忘記在部落格後面評論。

應該說一直以來,我們學習執行緒切換與排程,都是通過閱讀作業系統書籍或 Linux 原始碼甚至反彙編 Window 核心程式碼。無論怎樣,這些東西都很抽象,學習起來十分困難。

本系列文章,準確的說是實驗指導書吧,會帶你循序漸近的掌握下面的知識點:

  • 控制流如何切換
  • 完成一個簡單的暴力跳轉
  • 封裝 create_thread 函式
  • 抽取排程函式
  • 模組化專案
  • 封裝阻塞類函式,以 sleep 函式為代表
  • 時鐘與時間片概念
  • 為執行緒新增時間片
  • 時間片輪轉+優先順序排程

注意上面不是目錄,只是我們將要遇到的一些關鍵節點。最後,我們實現的效果應該是下面這個樣子:


這裡寫圖片描述
圖1 最終的效果

客戶端完整程式碼見圖 2.

需要注意的是,上面的程式碼,並沒有使用作業系統為我們提供的 pthread 系列函式,thread_create 和 thread_join 函式都是自己純手工實現的。唯一使用作業系統的函式就是設定時鐘,因此會有時鐘訊號產生,這一步是為了模擬時間片輪轉演算法而做的。

接下來,廢話不多說了,開啟新篇章吧《控制流切換原理》;


這裡寫圖片描述
圖 2 使用自己的編寫的多執行緒框架建立執行緒