一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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ā)送一個(gè)信號。每個(gè)get()調(diào)用得到一個(gè)任務(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)程中的通信一個(gè)最主要的用途就是用于日后的爬蟲,當(dāng)我們需要爬取5000個(gè)網(wǎng)頁的時(shí)候,我們需要從瀏覽器首頁獲取所有的靜態(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處理問題過程中,忙時(shí)會有成千上萬的任務(wù)需要被執(zhí)行,閑時(shí)可能只有零星任務(wù)。那么在成千上萬個(gè)任務(wù)需要被執(zhí)行的時(shí)候,我們就需要去創(chuàng)建成千上萬個(gè)進(jìn)程么?首先,創(chuàng)建進(jìn)程需要消耗時(shí)間,銷毀進(jìn)程也需要消耗時(shí)間。第二即便開啟了成千上萬的進(jìn)程,操作系統(tǒng)也不能讓他們同時(shí)執(zhí)行,這樣反而會影響程序的效率。因此我們不能無限制的根據(jù)任務(wù)開啟或者結(jié)束進(jìn)程。那么我們要怎么做呢?

進(jìn)程池就是先定義一個(gè)池子,在里面放上固定數(shù)量的進(jìn)程,有需求來了,就拿一個(gè)池中的進(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í)間最多有固定數(shù)量的進(jìn)程在運(yùn)行。這樣不會增加操作系統(tǒng)的調(diào)度難度,還節(jié)省了開閉進(jìn)程的時(shí)間,也一定程度上能夠?qū)崿F(xiàn)并發(fā)效果。

二、程序類型

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

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

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

poYBAGL-86CAdSbyAABqa8f7TT8718.png

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

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

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ù)耐廴?。所以該用哪種方法不用多說了吧。



審核編輯:劉清

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

    關(guān)注

    68

    文章

    11080

    瀏覽量

    217098
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    402

    瀏覽量

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

    關(guān)注

    0

    文章

    141

    瀏覽量

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

    關(guān)注

    0

    文章

    207

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(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 ?6297次閱讀
    韋東山freeRTOS系列教程之<b class='flag-5'>隊(duì)列</b>(<b class='flag-5'>queue</b>)(5)

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

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

    RAW queue

    1queue支持FIFO 和PRIO 的任務(wù)阻塞策略,如果是FIFO 的話阻塞隊(duì)列的順序是按照先來后到的次序去排列阻塞任務(wù),PRIO 策略的話是按照優(yōu)先級的排序。具體的設(shè)置可以直接設(shè)置這個(gè)結(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 ?3502次閱讀
    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 ?1854次閱讀

    什么是queue?

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

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

    一個(gè)結(jié)構(gòu)體用于描述隊(duì)列,叫做 Queue_t,這個(gè)結(jié)構(gòu)體在文件 queue.c 中定義。 3、隊(duì)列創(chuàng)建 在使用
    的頭像 發(fā)表于 07-06 17:03 ?1464次閱讀
    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 ?4485次閱讀
    RTOS中<b class='flag-5'>Queue</b>的工作原理

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

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

    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 ?567次閱讀
    OpenHarmony語言基礎(chǔ)類庫【@ohos.util.<b class='flag-5'>Queue</b> (線性容器<b class='flag-5'>Queue</b>)】