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

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

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

3天內不再提示

隊列Queue的常用方法有哪些

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

隊列-Queue

FIFO(先入先出)隊列Queue,LIFO(后入先出)隊列LifoQueue,和優先級隊列PriorityQueue。

常用方法:

Queue.qsize() 返回隊列的大小

Queue.empty() 如果隊列為空,返回True,反之False

Queue.full() 如果隊列滿了,返回True,反之False,Queue.full 與 maxsize 大小對應

Queue.get(item) 獲取隊列

Queue.get_nowait() 相當于Queue.get(False),非阻塞方法

Queue.put(item) 寫入隊列

Queue.task_done() 在完成一項工作之后,Queue.task_done()函數向任務已經完成的隊列發送一個信號。每個get()調用得到一個任務,接下來task_done()調用告訴隊列該任務已經處理完畢。

Queue.join() 實際上意味著等到隊列為空,再執行別的操作

Queue隊列方法主要用于我們的進程間的通信

poYBAGL-8zGAacc-AADl10N96tk172.pngpoYBAGL-8zeASJwcAADn1hwS3RM691.pngpYYBAGL-8z2AWRjfAACVSNAkYPw254.png

進程中的通信一個最主要的用途就是用于日后的爬蟲,當我們需要爬取5000個網頁的時候,我們需要從瀏覽器首頁獲取所有的靜態資源(檢查網頁代碼),然后再通過內容提取來提取出其中的URL(全局資源定位符),比如:www.baidu.com,這就和生產者消費者模型很相似。

poYBAGL-81CAFPZaAABAIskz18Y515.png

我們來簡單實現"生產者消費者模型":

poYBAGL-83SAerpaAAFooz0TXXY921.png

poYBAGL-83qAFNFfAACyi12-0es053.png
poYBAGL-84-AII18AADGzJaoEo0934.png

進程池-Pool

一、什么是進程池?

在程序實際處理問題過程中,忙時會有成千上萬的任務需要被執行,閑時可能只有零星任務。那么在成千上萬個任務需要被執行的時候,我們就需要去創建成千上萬個進程么?首先,創建進程需要消耗時間,銷毀進程也需要消耗時間。第二即便開啟了成千上萬的進程,操作系統也不能讓他們同時執行,這樣反而會影響程序的效率。因此我們不能無限制的根據任務開啟或者結束進程。那么我們要怎么做呢?

進程池就是先定義一個池子,在里面放上固定數量的進程,有需求來了,就拿一個池中的進程來處理任務,等到處理完畢,進程并不關閉,而是將進程再放回進程池中繼續等待任務。如果有很多任務需要執行,池中的進程數量不夠,任務就要等待之前的進程執行任務完畢歸來,拿到空閑進程才能繼續執行。也就是說,池中進程的數量是固定的,那么同一時間最多有固定數量的進程在運行。這樣不會增加操作系統的調度難度,還節省了開閉進程的時間,也一定程度上能夠實現并發效果。

二、程序類型

我們的程序有兩種:計算密集型、IO密集型

計算密集型:充分利用CPU,多線程可以充分利用多核(適合開啟多進程,但不適合開啟很多)

IO密集型:大部分的時間都在阻塞隊列,而不是在運行狀態(根本不適合開啟多進程)

poYBAGL-86CAdSbyAABqa8f7TT8718.png

信號量和多進程的處理方式的差異在于,每n個信號量是同步的,也就是說,如果只設置了4個信號量,4個用戶先搶占了CPU,那剩余的496個任務量需要等待前面4個用戶完成了(100%)之后才能夠繼續進行。而多進程是異步的,但是由于計算機的CPU有限,采用時間片輪轉法進行分配工作,所有的進程都有機會同時開始任務,但一段(細微)時間后,時間片就會分配給其他進程,這樣宏觀上看起來它是同時進行的,但其中涉及到了非常多的計算機的進程調度,但是信號量和多進程的處理時間需要視情況而定。

進程池在面對這種(做500件衣服)計算密集型的程序時具有非常高的效率,使用進程池不涉及進程調度,也就不浪費時間,屬于流水線式24h晝夜不息工作模式,做完一件衣服立馬就會接手第二件、第三件......這種方式充分地利用了CPU,不會在創建進程、進程調度、銷毀進程中浪費時間。

pYYBAGL-89iAPa9PAADorCKHLs8464.pngpYYBAGL-896AX1VFAAEv_aNtIQI093.pngpoYBAGL-8-WAdkj-AAAxgGL6Gwo470.png
poYBAGL-8-uADXQhAADkvTvFXk8244.png

從結果來看,我們可以發現,進程池的速度與多進程和信號量比起來那是相當的哇塞。所以該用哪種方法不用多說了吧。



審核編輯:劉清

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

    關注

    68

    文章

    10854

    瀏覽量

    211584
  • fifo
    +關注

    關注

    3

    文章

    387

    瀏覽量

    43649
  • URL
    URL
    +關注

    關注

    0

    文章

    139

    瀏覽量

    15328
  • 進程
    +關注

    關注

    0

    文章

    203

    瀏覽量

    13960
收藏 人收藏

    評論

    相關推薦

    韋東山freeRTOS系列教程之隊列(queue)(5)

    文章目錄 系列教程總目錄 概述 5.1 隊列的特性 5.1.1 常規操作 5.1.2 傳輸數據的兩種方法 5.1.3 隊列的阻塞訪問 5.2 隊列函數 5.2.1 創建 5.2.2 復
    的頭像 發表于 12-13 14:33 ?5842次閱讀
    韋東山freeRTOS系列教程之<b class='flag-5'>隊列</b>(<b class='flag-5'>queue</b>)(5)

    Linux下進程通訊消息隊列

    ?MQ(message queue),從字面意思上看,本質是個隊列,FIFO 先入先出,只不過隊列中存放的內容是message 而已。MQ 是在消息的傳輸過程中保存消息的容器。多用于分布式系統之間
    的頭像 發表于 08-19 19:56 ?1815次閱讀
    Linux下進程通訊消息<b class='flag-5'>隊列</b>

    RAW queue

    1queue支持FIFO 和PRIO 的任務阻塞策略,如果是FIFO 的話阻塞隊列的順序是按照先來后到的次序去排列阻塞任務,PRIO 策略的話是按照優先級的排序。具體的設置可以直接設置這個結構體中
    發表于 02-27 14:06

    Queue隊列的作用是什么

    文章目錄前言Queue 隊列semaphore 信號量Mutex 互斥量微信公眾號前言FreeRTOS STM32CubeMX配置 內存管理 任務管理上節介紹了用STM32CubeMX生成帶
    發表于 02-14 06:57

    消息隊列Queue相關資料推薦

    消息隊列QueueAPItx_queue_createtx_queue_deletex_queue_flushtx_queue_front_sendtx_queue_receivetx_queue_send_notifyAPItx_queue_createtx_queue_del
    發表于 02-22 06:53

    請問為什么給queue數據隊列畫成了環形呢?

    請問為什么 queue 數據隊列在《ARM 微控制器基礎與實戰》上給畫成了環形呢?
    發表于 03-09 10:55

    網絡中常用隊列管理方法比較

    本文主要介紹了網絡中常用的兩種隊列管理方法:先進先出(FIFO)和隨機提前檢測(RED),并且通過實驗比較了這兩種隊列管理方法在解決網絡擁塞控制方面的表現,體現了研究
    發表于 05-25 11:24 ?9次下載

    Java多線程總結之Queue

    在Java多線程應用中,隊列的使用率很高,多數生產消費模型的首選數據結構就是隊列。Java提供的線程安全的Queue可以分為 阻塞隊列和非阻塞隊列
    發表于 11-28 16:14 ?3304次閱讀
    Java多線程總結之<b class='flag-5'>Queue</b>

    ThreadX(九)------消息隊列Queue

    消息隊列QueueAPItx_queue_createtx_queue_deletex_queue_flushtx_queue_front_sendtx_queue_receivetx_queue_send_notifyAPItx_queue_createtx_queue_del
    發表于 12-28 19:35 ?2次下載
    ThreadX(九)------消息<b class='flag-5'>隊列</b><b class='flag-5'>Queue</b>

    STM32G0開發筆記:使用FreeRTOS系統的隊列Queue

    使用Platformio平臺的libopencm3開發框架來開發STM32G0,下面為使用FreeRTOS系統的隊列Queue
    的頭像 發表于 01-16 14:50 ?1375次閱讀

    什么是queue

    queue 容器,又稱隊列容器,是簡單地裝飾deque容器而成為另外的一種容器。
    的頭像 發表于 02-27 15:43 ?1626次閱讀

    FreeRTOS消息隊列結構體

    一個結構體用于描述隊列,叫做 Queue_t,這個結構體在文件 queue.c 中定義。 3、隊列創建 在使用
    的頭像 發表于 07-06 17:03 ?1094次閱讀
    FreeRTOS消息<b class='flag-5'>隊列</b>結構體

    RTOS中Queue的工作原理

    Queue即消息隊列是通過RTOS內核提供的一種服務。它是一種線程間同步數據的安全方法
    的頭像 發表于 07-25 15:45 ?3483次閱讀
    RTOS中<b class='flag-5'>Queue</b>的工作原理

    隊列實現棧的兩種方法

    兩個隊列實現一個棧 思路:兩個隊列實現一個棧,使用了隊列交換的思想。 代碼如下: type MyStack struct { queue1, que
    的頭像 發表于 10-08 16:01 ?659次閱讀

    OpenHarmony語言基礎類庫【@ohos.util.Queue (線性容器Queue)】

    Queue的特點是先進先出,在尾部增加元素,在頭部刪除元素。根據循環隊列的數據結構實現。
    的頭像 發表于 04-27 21:20 ?327次閱讀
    OpenHarmony語言基礎類庫【@ohos.util.<b class='flag-5'>Queue</b> (線性容器<b class='flag-5'>Queue</b>)】
    主站蜘蛛池模板: 久久九九精品国产自在现线拍| [高清无码] 波多野结衣| 成人精品视频网站| 欧美男男网站免费观看videos| 中文字幕日本一区| 龙广在线收听| 4399亚洲AV无码V无码网站 | 亚洲黄色在线观看| 国产亚洲精品久久久久小| 亚洲 无码 在线 专区| 国产最新进精品视频| 亚洲精品一卡二卡三卡四卡2021| 国内精自品线一区91| 一级毛片免费视频网站| 久久伊人免费| 992交通广播| 欧美性情video sexo视频| 俺也去最新地址| 神马影院午夜伦理限级| 国产精品99精品无码视亚| 消息称老熟妇乱视频一区二区| 好满射太多了装不下了视频| 夜里18款禁用的免费B站动漫| 久久是热这里只有精品| 97人妻无码AV碰碰视频| 日本无码色哟哟婷婷最新网站| 贵妇局长的蕾丝乳罩| 性春院| 黑人操白逼| 69夫妻交友网| 日韩a视频在线观看| 国产女高清在线看免费观看| 亚洲理论在线a中文字幕| 久久婷婷色一区二区三区| 99精品视频在线观看| 日韩亚洲欧美中文高清在线| 国产免费内射又粗又爽密桃视频| 亚洲欧洲自拍偷拍| 蜜臀AV精品一区二区三区| 纯肉高H种马艳遇风流多| 雪恋电影完整版免费观看|