色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺析線程的信號量和進程的信號量用法

冬至配餃子 ? 來源:多蘭多 ? 作者:Toranto ? 2022-08-19 10:56 ? 次閱讀

信號量-Semaphore

線程的信號量和進程的信號量用法無異:

pYYBAGL--g-AO_BzAACWToGWcWQ982.png
poYBAGL--hSAaxxiAADdZ2xDWhs986.png

事件-Event

通過event類將兩個方法連接起來進行溝通:

poYBAGL--jOAT8DWAADQVZsrcs0599.pngpYYBAGL--jmAJUpxAADOSHuAf9I332.png

線程池-ThreadPoolExecutor

線程池和進程池用法是幾乎無異的,但是要注意它導入的模塊,提交的方法,參數的填寫方法,以及關閉的方法:

pYYBAGL--lmAcSNWAACp_ffExrU976.pngpoYBAGL--l6Ab_5iAAEkdhtQ5c4710.png

如果涉及返回值的時候呢?

直接打印的話會打印出一串內存地址(自己嘗試)這時候需要調用.result方法(第14行)

poYBAGL--nqAErMQAAC6VzwrZFc462.pngpYYBAGL--n-AcAkrAACY2TFzDTY877.png

但是我們從結果上看,程序變成了一個同步程序,大大降低了我們的效率。這時候我們可以采用新建列表的方式來進行優化:

pYYBAGL--pyATtBsAADiP20ScmM706.pngpoYBAGL--qKAJrIvAAC_Qt_Jq94780.png

協程-greenlet

我們都知道:

①進程是計算機中最小的資源分配單位·

②線程是計算機中能被cpu調度的最小單位

現在有一個問題:能開啟的線程和進程是有限的,但是我們要處理的任務是無限的。比如我現在有5萬個任務要執行,難道我去開5萬個線程嗎?然后假設我開了300個線程,但是這300個線程都阻塞了,我仍然沒有充分利用CPU,(理想的情況是開啟一個線程,沒有IO只有計算,這叫充分利用CPU,但大多數的情況不是這樣的,多多少少會有一些阻塞情況),這時候協程(纖程)就派上用場了。一條線程在多個任務之間來回切換,切換這個動作是需要浪費時間的,但是對于CPU、操作系統來說,協程是不存在的,它們只能看見最小單位即線程。把一個線程的工作分成了好幾個任務,在多個任務中來回切換的現象稱為協程。

pYYBAGL--ryATGHIAABArqsJgks044.png

寫一個簡單地生產者消費者模型:

poYBAGL--syAbqrPAABXjKwQRKQ878.png

①協程能把一個線程的執行明確的區分開

②兩個任務,協程幫助我記住哪個任務執行到哪個位置上了,并且實現安全的切換

③一個任務不得不陷入阻塞了,在這個任務阻塞的過程中切換到另一個任務繼續執行

④你的程序只要還有任務需要執行你的當前線程永遠不會阻塞

⑤利用協程在多個任務陷入阻塞的時候進行切換,來保證一個線程在處理多個任務的時候總是在忙碌

⑥能夠更加充分的利用cpu,搶占更多的時間片

⑦無論是進程還是線程都是由操作系統來切換的,開啟過多的線程、進程會給操作系統的調度增加負擔

⑧如果我們是使用的協程,協程在程序之間的切換操作系統感知不到

⑨無論開啟多少個協程對操作系統來說總是一個線程在執行,操作系統的調度不會有任務的壓力

⑩協程的本質就是一條線程,所以完全不會產生數據安全的問題。

對于協程所需要用到的模塊主要有兩個,greenlet和gevent,其中greenlet是gevent的底層邏輯模塊,主要控制協程的切換(手動),gevent可以當做是greenlet的升級版,功能比greenlet更加全面,需要安裝,安裝后即可直接使用。

poYBAGL--vOAZ4vwAACPSqJkLSc706.png

pYYBAGL--vmAG9b7AACnPY5Q7bc444.png

可以看出,greenlet.switch可以幫助程序員手動切換阻塞,但是如果想要自動切換還需要用到gevent。

協程-gevent

gevent就是greenlet的完善版:

pYYBAGL--xiAKwhCAAB7_oR4tOc581.png

pYYBAGL--xyAS3_XAAFuvRBCWD8583.png

但是我們如果把gevent.sleep換成time.sleep呢?

pYYBAGL--0GAIE9bAAB_-F9bTi0348.png

poYBAGL--0aAQKthAAFmgOCzaOQ262.png

很明顯,阻塞沒有被識別到,所以我們需要用到導入monkey,這樣就能將一些常見的阻塞識別。

poYBAGL--2yARDGdAACiydKdiiA635.png

pYYBAGL--3OAHC2bAAFtL0x2oYk432.png




審核編輯:劉清




聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 線程池
    +關注

    關注

    0

    文章

    57

    瀏覽量

    6869
  • 線程
    +關注

    關注

    0

    文章

    505

    瀏覽量

    19722
  • 信號量
    +關注

    關注

    0

    文章

    53

    瀏覽量

    8368
收藏 人收藏

    評論

    相關推薦

    Linux下進程通訊之信號量

    ?信號量集,就是由多個信號量組成的一個數組。 作為一個整體, 信號量集中所有的信號量使用同一個等待隊列。 Linux 的信號量集為
    的頭像 發表于 08-19 19:55 ?2086次閱讀
    Linux下<b class='flag-5'>進程</b>通訊之<b class='flag-5'>信號量</b>集

    FreeRTOS信號量使用教程

    信號量是操作系統中重要的一部分,信號量一般用來進行資源管理和任務同步, FreeRTOS中信號量又分為二值信號量、 計數型信號量、互斥
    的頭像 發表于 12-19 09:22 ?3269次閱讀
    FreeRTOS<b class='flag-5'>信號量</b>使用教程

    信號量用法

    本帖最后由 chenshuihong 于 2016-4-22 11:28 編輯 信號量的分配,信號量的分配,信號量的分配,信號量的分配
    發表于 04-22 11:27

    LabVIEW信號量

    LabVIEW信號量信號量是一種用來限制可以同時取用共享(受保護)資源的任務數量方法。受保護的資源或關鍵代碼部分可能包括寫入全局變量或與外部儀器進行通信。您可以使用信號量使您的代碼線程
    發表于 04-09 21:52

    信號量機制怎么理解

    信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施,是可以用來保證兩個或多個關鍵代碼段不被并發調用。在進入一個關鍵代碼段之前,線程必須獲取一個
    發表于 11-14 09:23 ?2.6w次閱讀
    <b class='flag-5'>信號量</b>機制怎么理解

    你了解Linux 各類信號量

    內核信號量與用戶信號量,用戶信號量分為POXIS信號量和SYSTEMV信號量,POXIS信號量
    發表于 05-04 17:19 ?2533次閱讀
    你了解Linux 各類<b class='flag-5'>信號量</b>?

    信號量和自旋鎖

    ------------------------------------------------------??? Linux中的信號量是一種睡眠鎖。如果有一個任務試圖獲得一個已被持有的信號量時,信號量會將其推入等待隊列,然后讓
    發表于 04-02 14:43 ?816次閱讀

    Linux IPC System V 信號量

    ?立即銷毀指定的信號量集,調用的進程的的effective UID必須和信號量集的創建者或所有者相匹配,或者這個進程有足夠的特權級別,此時第四個參數會被忽略IPC_INFO(Linux
    發表于 04-02 14:46 ?335次閱讀

    Linux 多線程信號量同步

    直到系統將資源分配給該進程(進入等待隊列,一直等到資源輪到該進程)。V操作:如果在該信號量的等待隊列中有進程在等待資源,則喚醒一個阻塞進程;
    發表于 04-02 14:47 ?410次閱讀

    Linux信號量(2):POSIX 信號量

    上一章,講述了 SYSTEM V 信號量,主要運行于進程之間,本章主要介紹 POSIX 信號量:有名信號量、無名信號量。 POSIX
    的頭像 發表于 10-29 17:34 ?739次閱讀

    ThreadX(六)------信號量semaphore

    信號量semphere概述
    發表于 12-28 19:26 ?7次下載
    ThreadX(六)------<b class='flag-5'>信號量</b>semaphore

    使用二進制信號量取代任務通知

    二進制信號量只有0和1,兩個任務公用一個信號量,一個任務用于產生信號量(即對信號量+1),另一個任務使用此信號量(即對
    的頭像 發表于 09-15 09:22 ?892次閱讀

    FreeRTOS的二值信號量

    FreeRTOS中的信號量是一種任務間通信的方式,信號量包括:二值信號量、互斥信號量、計數信號量,本次實驗只使用二值
    的頭像 發表于 02-10 15:07 ?1538次閱讀

    Free RTOS的計數型信號量

    上篇講解了二值信號量,二值信號量只能判斷有無,而不能確定事件發生的次數,因此我們為了確定事件的次數引入了計數型信號量
    的頭像 發表于 02-10 15:29 ?1062次閱讀
    Free RTOS的計數型<b class='flag-5'>信號量</b>

    使用Linux信號量實現互斥點燈

    信號量常用于控制對共享資源的訪問,有計數型信號量和二值信號量之分。初始化時信號量值大于1的,就是計數型信號量,計數型
    的頭像 發表于 04-13 15:12 ?836次閱讀
    使用Linux<b class='flag-5'>信號量</b>實現互斥點燈
    主站蜘蛛池模板: 国产AV午夜精品一区二区入口| 日韩午夜影院| 久久国语精品| 欧美国产影院| 亚洲AV无码专区国产精品99| 99精品网站| 很很射影院| 色噜噜视频影院| 78m成人亚洲| 国产综合欧美区在线| 日本高清无卡码一区二区久久| 一区二区三区国产| 国产精品女主播主要上线| 女的把腿张开男的往里面插 | vr亚洲成年网址在线观看| 国产亚洲精品久久久久久白晶晶 | 国产小视频在线高清播放| 欧美男女爱爱| 在线亚洲色拍偷拍在线视频| 国产系列在线亚洲视频| 乳女教师欲乱动漫无修版动画| 97亚洲狠狠色综合久久久久| 久见久热 这里只有精品| 亚欧免费观看在线观看更新| 调教日本美女| 轻轻挺进女教师的身体| 97精品在线| 龙岩综合频道| 中文字幕本庄优花喂奶| 精品无码无人网站免费视频 | 99视频在线国产| 麻豆第一区MV免费观看网站 | 18岁末年禁止观看免费1000个| 后入式狂顶免费视频| 亚洲精品成人AV在线观看爽翻| 国产精品成人A蜜柚在线观看| 日本视频中文字幕一区二区| 超碰在线97av视频免费| 秋霞伦理高清视频在线| WWW国产色情在线观看APP| 欧洲美女高清一级毛片|