進程、線程、協程

      網友投稿 779 2025-03-31

      關于進程、線程、協程,有非常詳細和豐富的博客或者學習資源,我不在此做贅述,我大致在此介紹一下這幾個東西。

      1.進程擁有自己獨立的堆和棧,既不共享堆,亦不共享棧,進程由操作系統調度。

      2.線程擁有自己獨立的棧和共享的堆,共享堆,不共享棧,線程亦由操作系統調度(標準線程是的)。

      3.協程和線程一樣共享堆,不共享棧,協程由程序員在協程的代碼里顯示調度。

      PHP中的協程實現基礎 yield

      yield的根本實現是生成器類,而迭代器類是迭代器接口的實現:

      Generator?implements?Iterator?{

      public?mixed?current?(?void?) // 返回當前產生的值

      public?mixed?key?(?void?) // 返回當前產生的鍵

      public?void?next?(?void?) // 生成器繼續執行

      public?void?rewind?(?void?) // 重置迭代器,如果迭代已經開始了,這里會拋出一個異常。

      // renwind的執行將會導致第一個yield被執行, 并且忽略了他的返回值.

      public?mixed?send?(?mixed?$value?) // 向生成器中傳入一個值,并且當做?yield?表達式的結果,然后繼續執行生成器。如果當這個方法被調用時,生成器

      // 不在?yield?表達式,那么在傳入值之前,它會先運行到第一個?yield?表達式。

      public?void?throw?(?Exception?$exception?) // 向生成器中拋入一個異常

      進程、線程、協程

      public?bool?valid?(?void?) // 檢查迭代器是否被關閉

      public?void?__wakeup?(?void?) // 序列化回調,拋出一個異常以表示生成器不能被序列化

      }

      以上解析可以參考PHP官方文檔。

      http://php.net/manual/zh/clas...

      以及鳥哥翻譯的這篇詳細文檔:

      http://www.laruence.com/2015/...

      我就以他實現的協程多任務調度為基礎做一下例子說明并說一下關于我在阻塞方面所做的一些思考。

      自定義簡單定時執行任務示例:

      (此例子必須依賴于以上鳥哥實現的協程調度代碼)

      class timer {

      private $start = 0; // 定時開始時間

      private $timer; // 間隔的時間差,單位秒

      private $value = 0; // 產生的結果值

      private $callback; // 異步回調

      private $isEnd = false; // 當前定時器任務是否結束

      public function __construct($timer,callable $callback)

      {

      $this->start = time();

      $this->timer = $timer;

      $this->callback = $callback;

      }

      public function run() {

      if($this->valid()) {

      $callback?= $this->callback;

      $callback($this->value ++,$this);

      $this->start = time();

      }

      }

      /**

      *?定時執行檢查

      */

      public function valid() {

      $end

      任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:WPS表格辦公一鍵隱藏和顯示單元格行或列(wps表格如何顯示隱藏單元格)
      下一篇:Redis設計與實現筆記1 | Redis單機數據庫的實現
      相關文章
      亚洲香蕉久久一区二区三区四区| 亚洲电影国产一区| 亚洲男人天堂影院| 少妇中文字幕乱码亚洲影视| 久久精品亚洲综合一品| 亚洲va中文字幕无码久久不卡| 国产偷国产偷亚洲高清日韩| 亚洲男人第一无码aⅴ网站| 风间由美在线亚洲一区| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲AV无码专区国产乱码不卡| 青草久久精品亚洲综合专区| 在线观看免费亚洲| 亚洲性久久久影院| 一本色道久久综合亚洲精品| 亚洲桃色AV无码| 久久青青成人亚洲精品| 91在线亚洲精品专区| 亚洲成a人片77777群色| 亚洲一区在线视频| 亚洲日韩一区二区一无码| 综合偷自拍亚洲乱中文字幕| | 亚洲人成网网址在线看| 亚洲最大福利视频| 亚洲欧美黑人猛交群| 国产产在线精品亚洲AAVV| 亚洲精品无码99在线观看| 三上悠亚亚洲一区高清| 亚洲成AV人片天堂网无码| 亚洲成人在线电影| 亚洲毛片在线免费观看| 亚洲伊人久久大香线蕉结合| 性色av极品无码专区亚洲 | 亚洲av无码国产精品夜色午夜| 久久精品国产亚洲av麻豆小说| 亚洲中文字幕无码av在线| 亚洲国产区男人本色| 亚洲精品国产精品乱码不卡| 国产亚洲人成网站观看| 亚洲宅男永久在线|