99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

隊(duì)列Queue的常用方法有哪些

冬至配餃子 ? 來源:多蘭多 ? 作者:Toranto ? 2022-08-19 10:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

隊(duì)列-Queue

FIFO(先入先出)隊(duì)列Queue,LIFO(后入先出)隊(duì)列LifoQueue,和優(yōu)先級隊(duì)列PriorityQueue。

常用方法:

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

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

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

Queue.get(item) 獲取隊(duì)列

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

Queue.put(item) 寫入隊(duì)列

Queue.task_done() 在完成一項(xiàng)工作之后,Queue.task_done()函數(shù)向任務(wù)已經(jīng)完成的隊(duì)列發(fā)送一個信號。每個get()調(diào)用得到一個任務(wù),接下來task_done()調(diào)用告訴隊(duì)列該任務(wù)已經(jīng)處理完畢。

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

Queue隊(duì)列方法主要用于我們的進(jìn)程間的通信。

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

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

poYBAGL-81CAFPZaAABAIskz18Y515.png

我們來簡單實(shí)現(xiàn)"生產(chǎn)者消費(fèi)者模型":

poYBAGL-83SAerpaAAFooz0TXXY921.png

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

進(jìn)程池-Pool

一、什么是進(jìn)程池?

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

進(jìn)程池就是先定義一個池子,在里面放上固定數(shù)量的進(jìn)程,有需求來了,就拿一個池中的進(jìn)程來處理任務(wù),等到處理完畢,進(jìn)程并不關(guān)閉,而是將進(jìn)程再放回進(jìn)程池中繼續(xù)等待任務(wù)。如果有很多任務(wù)需要執(zhí)行,池中的進(jìn)程數(shù)量不夠,任務(wù)就要等待之前的進(jìn)程執(zhí)行任務(wù)完畢歸來,拿到空閑進(jìn)程才能繼續(xù)執(zhí)行。也就是說,池中進(jìn)程的數(shù)量是固定的,那么同一時間最多有固定數(shù)量的進(jìn)程在運(yùn)行。這樣不會增加操作系統(tǒng)的調(diào)度難度,還節(jié)省了開閉進(jìn)程的時間,也一定程度上能夠?qū)崿F(xiàn)并發(fā)效果。

二、程序類型

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

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

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

poYBAGL-86CAdSbyAABqa8f7TT8718.png

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

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

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

從結(jié)果來看,我們可以發(fā)現(xiàn),進(jìn)程池的速度與多進(jìn)程和信號量比起來那是相當(dāng)?shù)耐廴K栽撚媚姆N方法不用多說了吧。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11083

    瀏覽量

    217190
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    402

    瀏覽量

    44830
  • URL
    URL
    +關(guān)注

    關(guān)注

    0

    文章

    141

    瀏覽量

    15870
  • 進(jìn)程
    +關(guān)注

    關(guān)注

    0

    文章

    207

    瀏覽量

    14292
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    Linux下進(jìn)程通訊消息隊(duì)列

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

    RAW queue

    1queue支持FIFO 和PRIO 的任務(wù)阻塞策略,如果是FIFO 的話阻塞隊(duì)列的順序是按照先來后到的次序去排列阻塞任務(wù),PRIO 策略的話是按照優(yōu)先級的排序。具體的設(shè)置可以直接設(shè)置這個結(jié)構(gòu)體中
    發(fā)表于 02-27 14:06

    Queue隊(duì)列的作用是什么

    文章目錄前言Queue 隊(duì)列semaphore 信號量Mutex 互斥量微信公眾號前言FreeRTOS STM32CubeMX配置 內(nèi)存管理 任務(wù)管理上節(jié)介紹了用STM32CubeMX生成帶
    發(fā)表于 02-14 06:57

    消息隊(duì)列Queue相關(guān)資料推薦

    消息隊(duì)列QueueAPItx_queue_createtx_queue_deletex_queue_flushtx_queue_front_sendtx_queue_receivetx_queue_send_notifyAPItx_queue_createtx_queue_del
    發(fā)表于 02-22 06:53

    請問為什么給queue數(shù)據(jù)隊(duì)列畫成了環(huán)形呢?

    請問為什么 queue 數(shù)據(jù)隊(duì)列在《ARM 微控制器基礎(chǔ)與實(shí)戰(zhàn)》上給畫成了環(huán)形呢?
    發(fā)表于 03-09 10:55

    網(wǎng)絡(luò)中常用隊(duì)列管理方法比較

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

    Java多線程總結(jié)之Queue

    在Java多線程應(yīng)用中,隊(duì)列的使用率很高,多數(shù)生產(chǎn)消費(fèi)模型的首選數(shù)據(jù)結(jié)構(gòu)就是隊(duì)列。Java提供的線程安全的Queue可以分為 阻塞隊(duì)列和非阻塞隊(duì)列
    發(fā)表于 11-28 16:14 ?3508次閱讀
    Java多線程總結(jié)之<b class='flag-5'>Queue</b>

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

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

    STM32G0開發(fā)筆記:使用FreeRTOS系統(tǒng)的隊(duì)列Queue

    使用Platformio平臺的libopencm3開發(fā)框架來開發(fā)STM32G0,下面為使用FreeRTOS系統(tǒng)的隊(duì)列Queue。
    的頭像 發(fā)表于 01-16 14:50 ?1859次閱讀

    什么是queue

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

    FreeRTOS消息隊(duì)列結(jié)構(gòu)體

    一個結(jié)構(gòu)體用于描述隊(duì)列,叫做 Queue_t,這個結(jié)構(gòu)體在文件 queue.c 中定義。 3、隊(duì)列創(chuàng)建 在使用
    的頭像 發(fā)表于 07-06 17:03 ?1469次閱讀
    FreeRTOS消息<b class='flag-5'>隊(duì)列</b>結(jié)構(gòu)體

    RTOS中Queue的工作原理

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

    隊(duì)列實(shí)現(xiàn)棧的兩種方法

    兩個隊(duì)列實(shí)現(xiàn)一個棧 思路:兩個隊(duì)列實(shí)現(xiàn)一個棧,使用了隊(duì)列交換的思想。 代碼如下: type MyStack struct { queue1, que
    的頭像 發(fā)表于 10-08 16:01 ?966次閱讀

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

    Queue的特點(diǎn)是先進(jìn)先出,在尾部增加元素,在頭部刪除元素。根據(jù)循環(huán)隊(duì)列的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。
    的頭像 發(fā)表于 04-27 21:20 ?575次閱讀
    OpenHarmony語言基礎(chǔ)類庫【@ohos.util.<b class='flag-5'>Queue</b> (線性容器<b class='flag-5'>Queue</b>)】