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

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

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

詳解同步異步和阻塞非阻塞

汽車玩家 ? 來源:簡書 ? 作者:coding400 ? 2020-05-03 17:53 ? 次閱讀

同步、異步

同步、異步分別指的是一種通訊方式,當(dāng) cpu 不需要執(zhí)行線程上下文切換就能完成任務(wù),此時(shí)便認(rèn)為這種通訊方式是同步的,相對(duì)的如果存在cpu 上下文切換,這種方式便是異步。

詳解同步異步和阻塞非阻塞

這里通過一個(gè)去食堂打飯的示例來理解什么是同步、異步

同步

假設(shè)現(xiàn)是上午最后一節(jié)課,由于小李上課的教室離食堂比較遠(yuǎn),當(dāng)下課之后,如果小李跑得不夠快,那么到食堂之后會(huì)發(fā)現(xiàn)別人已經(jīng)早你一步到達(dá)了,而小李又是個(gè)三好學(xué)生,又不能插隊(duì),此時(shí)小李只能悲痛欲絕的排在打飯窗口A的隊(duì)伍最后一個(gè)人后面,依次等待輪到小李填寫菜單然后取飯

異步

同樣的場(chǎng)景,當(dāng)小李跑到食堂之后,由于身體不好,已經(jīng)氣喘吁吁,此時(shí)又想找個(gè)位置休息下,又太餓,想去排隊(duì)打飯。還好,窗口B 提供了這個(gè)功能,打飯的人先去取號(hào)并填寫菜單,然后就可以去做其他事情,等到排的號(hào)到小李了之后,食堂阿姨會(huì)通過這個(gè)號(hào)碼來呼叫你來取已經(jīng)做好的飯,這時(shí)你心中一喜,這不就是我現(xiàn)在需要的么,于是你拿了號(hào)及填寫菜單之后,便去找個(gè)位置占著,一邊等待食堂阿姨叫你來取飯,同時(shí)還可以與朋友聊聊人生

總結(jié)可以看出,同步的方式的耗時(shí)包含了:1.排隊(duì)等待 2.填寫菜單 3.等待廚師做好而異步的方式則可以直接填寫好菜單、取個(gè)號(hào)然后交給食堂阿姨之后,便可以去做其他的事情,完全沒有等待的耗時(shí),只需要在食堂阿姨呼喚你的時(shí)候,來取飯即可。

異步通常能提高系統(tǒng)的吞吐量,從 Servlet 3.0 便支持通過異步的方式來處理請(qǐng)求,當(dāng)然這并不代表它什么都好,缺點(diǎn)是會(huì)降低系統(tǒng)的一部分響應(yīng)時(shí)間,而且增加了系統(tǒng)的復(fù)雜度,使調(diào)試?yán)щy 同步相對(duì)的便是,編程簡單,響應(yīng)速度快,不需要對(duì)線程上下文進(jìn)行切換

阻塞、非阻塞

阻塞、非阻塞指的是在同步模式下,如果當(dāng)前線程一直在等待響應(yīng)數(shù)據(jù)并且不能做其他事情那么認(rèn)為是阻塞的,如果當(dāng)前線程在等待響應(yīng)數(shù)據(jù)返回的同時(shí),又可以干其他的時(shí),那么則是非阻塞的

詳解同步異步和阻塞非阻塞

同樣的,這里再次使用食堂打飯的場(chǎng)景

阻塞

當(dāng)小徐到食堂時(shí),已經(jīng)有許多人在排隊(duì)打飯了,這時(shí)小徐無奈之下,選擇了離她最近的窗口A排隊(duì)打飯,然后等待的時(shí)間總是漫長的,這時(shí)她百般無聊下,想拿出她的手機(jī)準(zhǔn)備消磨下時(shí)間,結(jié)果她突然想起手機(jī)還在教室!雖然站在這里排隊(duì)打飯沒有手機(jī)玩,但也是不幸中的萬幸了,總算手機(jī)沒丟

非阻塞第二次,小徐再次來到食堂,發(fā)現(xiàn)食堂新增了取號(hào)的功能,但是只能取號(hào),不能填寫菜單,最終還是選擇了這家取號(hào)的窗口B,等著叫號(hào)然后寫菜單就可以了,小徐興高采烈的玩起了手機(jī),刷起了簡書

總結(jié)

當(dāng)你排隊(duì)在窗口A的時(shí)候,此時(shí)不能做其他任何事情,只能等著隊(duì)伍到自己這,然后填寫菜單,最后等待取飯,此時(shí)在整個(gè)排隊(duì)的周期內(nèi)都不能干其他事情 而在窗口B則可以通過取號(hào)的方式,讓你不需要時(shí)刻的去站著排隊(duì),而是可以去刷刷簡書、打打游戲

JDK中的BIO 對(duì)應(yīng)的就是阻塞IO,NIO 對(duì)應(yīng)的是非阻塞IO,通過非阻塞IO,可以讓一個(gè)線程處理成千上萬的并發(fā)請(qǐng)求

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

    關(guān)注

    68

    文章

    10805

    瀏覽量

    210850
  • 阻塞
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    8083
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    socket編程中的阻塞阻塞

    在網(wǎng)絡(luò)編程中, socket 是一個(gè)非常重要的概念,它提供了一個(gè)抽象層,使得開發(fā)者可以不必關(guān)心底層的網(wǎng)絡(luò)通信細(xì)節(jié)。 socket 編程中的阻塞阻塞模式是兩種不同的操作方式,它們對(duì)程序的響應(yīng)性
    的頭像 發(fā)表于 11-01 16:13 ?104次閱讀

    Verilog HDL的基礎(chǔ)知識(shí)

    本文繼續(xù)介紹Verilog HDL基礎(chǔ)知識(shí),重點(diǎn)介紹賦值語句、阻塞阻塞、循環(huán)語句、同步異步、函數(shù)與任務(wù)語法知識(shí)。
    的頭像 發(fā)表于 10-24 15:00 ?138次閱讀
    Verilog HDL的基礎(chǔ)知識(shí)

    socket阻塞阻塞的區(qū)別是什么

    在計(jì)算機(jī)編程中,socket 是一種通信端點(diǎn),用于在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)傳輸。Socket 可以是阻塞的或阻塞的,這兩種模式在處理數(shù)據(jù)傳輸時(shí)有不同的行為。 阻塞模式(Blocking Mo
    的頭像 發(fā)表于 08-16 11:13 ?535次閱讀

    求助,關(guān)于CyU3PUsbHostEpWaitForCompletion函數(shù)中的阻塞問題求解

    主線程)調(diào)用該函數(shù)時(shí),CyU3PUsbHostEpWaitForCompletion 函數(shù)經(jīng)常阻塞,雖然指定了超時(shí)值,但從未返回。 我想應(yīng)該在主程序線程中調(diào)用該函數(shù),以避免出現(xiàn)阻塞問題。 如何正確使用該功能而不造成
    發(fā)表于 07-23 07:57

    請(qǐng)問使用lwip創(chuàng)建socket,該如何做到阻塞的接收發(fā)送數(shù)據(jù)?

    請(qǐng)問使用lwip創(chuàng)建socket,該如何做到阻塞的接收發(fā)送數(shù)據(jù)?
    發(fā)表于 06-19 06:02

    鴻蒙OS實(shí)例:同步獲取應(yīng)用配置的【versionCode和versionName】

    鴻蒙大部分提供的方法都是異步的,所以可以使用async、await 轉(zhuǎn)換,可以跟同步方法一樣的使用...只是要注意這個(gè)會(huì)阻塞
    的頭像 發(fā)表于 03-27 16:20 ?457次閱讀

    什么是阻塞阻塞?

    什么是阻塞阻塞?我們就用管道的讀寫來舉例子。
    的頭像 發(fā)表于 03-25 10:04 ?450次閱讀

    如何在8051單片機(jī)上編程一個(gè)阻塞延遲函數(shù)?

    術(shù)語阻塞意味著微控制器的主代碼在整個(gè)延遲期間被阻塞(什么都不做)。對(duì)于小的延遲和簡單的問題,這通常是可以接受的,但可能導(dǎo)致不可接受的操作。
    發(fā)表于 02-29 11:48 ?690次閱讀

    verilog同步異步的區(qū)別 verilog阻塞賦值和阻塞賦值的區(qū)別

    Verilog是一種硬件描述語言,用于設(shè)計(jì)和模擬數(shù)字電路。在Verilog中,同步異步是用來描述數(shù)據(jù)傳輸和信號(hào)處理的兩種不同方式,而阻塞賦值和
    的頭像 發(fā)表于 02-22 15:33 ?1435次閱讀

    以太網(wǎng)阻塞的常見原因與解決方法

    以太網(wǎng)阻塞的常見原因與解決方法 以太網(wǎng)阻塞是指在以太網(wǎng)中數(shù)據(jù)流量增加超過網(wǎng)絡(luò)設(shè)備處理能力的情況下,導(dǎo)致網(wǎng)絡(luò)性能下降、延遲增加、丟包率上升等問題。下面將詳細(xì)討論以太網(wǎng)阻塞的常見原因及解決方法。 一
    的頭像 發(fā)表于 12-27 13:58 ?1156次閱讀

    進(jìn)程由執(zhí)行態(tài)變?yōu)?b class='flag-5'>阻塞態(tài)的主要原因

    進(jìn)程在運(yùn)行過程中,可能由于各種原因而從執(zhí)行態(tài)變?yōu)?b class='flag-5'>阻塞態(tài)。主要原因包括以下幾個(gè)方面。 首先,進(jìn)程可能由于等待外部資源而進(jìn)入阻塞態(tài)。例如,當(dāng)進(jìn)程需要從硬盤讀取數(shù)據(jù)時(shí),由于硬盤的讀取速度相對(duì)較慢,進(jìn)程需要
    的頭像 發(fā)表于 11-17 14:14 ?2764次閱讀

    什么事件會(huì)使執(zhí)行變成阻塞

    執(zhí)行阻塞是指當(dāng)一個(gè)進(jìn)程無法繼續(xù)執(zhí)行時(shí)被掛起的狀態(tài)。這可以由多種事件引起,下面詳細(xì)介紹了一些常見的情況: I/O操作阻塞:在進(jìn)行文件讀寫、網(wǎng)絡(luò)通信、數(shù)據(jù)庫訪問等I/O操作時(shí),如果所需的數(shù)據(jù)還沒有
    的頭像 發(fā)表于 11-17 14:08 ?845次閱讀

    運(yùn)行狀態(tài)變?yōu)?b class='flag-5'>阻塞狀態(tài)的條件

    在計(jì)算機(jī)科學(xué)中,阻塞是指當(dāng)一個(gè)進(jìn)程(或線程)由于等待某種外部事件的發(fā)生,無法繼續(xù)執(zhí)行的狀態(tài)。阻塞可能會(huì)在不同的情況下發(fā)生,例如等待用戶輸入、等待數(shù)據(jù)從網(wǎng)絡(luò)到達(dá)、等待磁盤讀寫完成等等。本文將詳細(xì)探討
    的頭像 發(fā)表于 11-17 11:45 ?1581次閱讀

    阻塞態(tài)可以直接到運(yùn)行態(tài)嗎

    阻塞態(tài)即是指進(jìn)程或線程在等待某種事件或資源時(shí)暫時(shí)停止執(zhí)行的狀態(tài)。在計(jì)算機(jī)系統(tǒng)中,由于各種原因,進(jìn)程或線程可能會(huì)進(jìn)入阻塞態(tài),等待著能夠繼續(xù)執(zhí)行的條件成熟。 在絕大多數(shù)情況下,阻塞態(tài)到運(yùn)行態(tài)并不是直接
    的頭像 發(fā)表于 11-17 11:43 ?2227次閱讀

    阻塞狀態(tài)和等待狀態(tài)的區(qū)別

    阻塞狀態(tài)和等待狀態(tài)是計(jì)算機(jī)領(lǐng)域中常用的術(shù)語,用來描述進(jìn)程或線程的狀態(tài)。盡管這兩個(gè)狀態(tài)在表面上有些相似,但它們有著本質(zhì)上的區(qū)別。本文將詳盡、詳實(shí)、細(xì)致地討論阻塞狀態(tài)和等待狀態(tài)之間的區(qū)別,包括定義
    的頭像 發(fā)表于 11-17 11:33 ?3551次閱讀