零基础java自学流程-Java语言高级531
同步/異步、阻塞/非阻塞概念
同步異步
同步和異步關(guān)注的是消息通信機(jī)制?(synchronous communication/ asynchronous communication)
同步:在發(fā)出一個(gè)調(diào)用時(shí),在沒(méi)有得到結(jié)果之前,該調(diào)用就不返回。一旦調(diào)用返回,就得到返回值了。調(diào)用者主動(dòng)等待這個(gè)調(diào)用的結(jié)果。
異步:調(diào)用在發(fā)出之后就直接返回了,沒(méi)有立刻得到返回結(jié)果。在調(diào)用發(fā)出后,被調(diào)用者通過(guò)狀態(tài)、通知來(lái)通知調(diào)用者,或通過(guò)回調(diào)函數(shù)處理這個(gè)調(diào)用。
I/O
通常來(lái)說(shuō),IO操作包括:對(duì)硬盤(pán)的讀寫(xiě)、對(duì)socket的讀寫(xiě)以及外設(shè)的讀寫(xiě),并且需要進(jìn)行用戶(hù)空間和內(nèi)核空
間的區(qū)分(用戶(hù)空間就是普通的用戶(hù)進(jìn)程,內(nèi)核空間就是內(nèi)核進(jìn)程,只有內(nèi)核空間才可以直接范圍磁盤(pán)等物理
I/O設(shè)備)
用戶(hù)空間產(chǎn)生一個(gè)讀請(qǐng)求,請(qǐng)求再轉(zhuǎn)交由內(nèi)核空間執(zhí)行
1. 內(nèi)核檢查讀取的數(shù)據(jù)是否就緒
2. 如果就緒,內(nèi)核將數(shù)據(jù)從內(nèi)核空間復(fù)制到用戶(hù)空間(內(nèi)存上拷貝)
阻塞I/O與非阻塞I/O
阻塞I/O:內(nèi)核在檢查數(shù)據(jù)未就緒時(shí),會(huì)一直等待,直到數(shù)據(jù)就緒
非阻塞I/O:如果數(shù)據(jù)沒(méi)有就緒,則會(huì)返回一個(gè)標(biāo)志信息告知用戶(hù)線程當(dāng)前要讀的數(shù)據(jù)沒(méi)有就緒
它們的區(qū)別在于I/O的第一階段,阻塞是選擇等待,非阻塞是返回一個(gè)標(biāo)志信息
那么非阻塞I/O的優(yōu)勢(shì)在哪里呢?使用阻塞I/O處理網(wǎng)絡(luò)連接時(shí),有10000個(gè)連接就要開(kāi)10000個(gè)線程,無(wú)論
有沒(méi)有數(shù)據(jù)到來(lái),處理某一連接的線程必須“忠實(shí)地阻塞”。而非阻塞I/O就不需要這樣,它可以維護(hù)一個(gè)1000
個(gè)線程的線程池,當(dāng)有數(shù)據(jù)就緒時(shí),啟動(dòng)一個(gè)線程去接受數(shù)據(jù),當(dāng)沒(méi)有數(shù)據(jù)時(shí),線程不需要等待,直接就可以
回到池中,等待被調(diào)度到去接受其它連接。因此非阻塞I/O非常適合連接多但傳輸?shù)臄?shù)據(jù)內(nèi)容不大的情況,如
果連接少數(shù)據(jù)多,阻塞I/O更容易編程
同步I/O和異步I/O
事實(shí)上,同步IO和異步IO模型是針對(duì)用戶(hù)線程和內(nèi)核的交互來(lái)說(shuō)的,即數(shù)據(jù)是否就緒的消息傳遞機(jī)制
同步IO:當(dāng)用戶(hù)發(fā)出IO請(qǐng)求操作之后,如果數(shù)據(jù)沒(méi)有就緒,需要通過(guò)用戶(hù)線程或者內(nèi)核不斷地去輪詢(xún)數(shù)據(jù)是否
就緒,當(dāng)數(shù)據(jù)就緒時(shí),再將數(shù)據(jù)從內(nèi)核拷貝到用戶(hù)線程
異步IO:只有IO請(qǐng)求操作的發(fā)出是由用戶(hù)線程來(lái)進(jìn)行的,內(nèi)核自動(dòng)完成檢查數(shù)據(jù)是否就緒和將數(shù)據(jù)拷貝
到用戶(hù)空間的過(guò)程,然后發(fā)送通知告知用戶(hù)線程IO操作已經(jīng)完成。
尚學(xué)堂給同學(xué)們帶來(lái)全新的Java300集課程啦!java零基礎(chǔ)小白自學(xué)Java必備優(yōu)質(zhì)教程_手把手圖解學(xué)習(xí)Java,讓學(xué)習(xí)成為一種享受_嗶哩嗶哩_bilibili尚學(xué)堂給同學(xué)們帶來(lái)全新的Java300集課程啦本課程為Java300集2022版第一季,配合最新版的Java課程,所有視頻重新錄制,課件所有圖形做了重新繪制和配色,圖解學(xué)習(xí)Java,讓學(xué)習(xí)成為一種享受本套教程專(zhuān)門(mén)為零基礎(chǔ)學(xué)員而制,適合準(zhǔn)備入行Java開(kāi)發(fā)的零基礎(chǔ)學(xué)員,視頻中穿插多個(gè)實(shí)戰(zhàn)項(xiàng)目。每一個(gè)知識(shí)點(diǎn)都講解的通俗易懂,由淺入深。不僅適用于零基礎(chǔ)的初學(xué)者,有經(jīng)驗(yàn)的程序員也可做鞏固學(xué)習(xí)。后續(xù)課https://www.bilibili.com/video/BV1qL411u7eE?spm_id_from=333.999.0.0
總結(jié)
以上是生活随笔為你收集整理的零基础java自学流程-Java语言高级531的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 三菱PLC编程指令简介
- 下一篇: java sheet 打印区域设定,如何