同步、異步
同步、異步分別指的是一種通訊方式,當(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)求
-
cpu
+關(guān)注
關(guān)注
68文章
10805瀏覽量
210850 -
阻塞
+關(guān)注
關(guān)注
0文章
24瀏覽量
8083
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論