国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
阻塞與掛起的區(qū)別

線程與進(jìn)程的阻塞

      線程在運(yùn)行的過(guò)程中因?yàn)槟承┰蚨l(fā)生阻塞,阻塞狀態(tài)的線程的特點(diǎn)是:該線程放棄CPU的使用,暫停運(yùn)行,只有等到導(dǎo)致阻塞的原因消除之后才回復(fù)運(yùn)行?;蛘呤潜黄渌木€程中斷,該線程也會(huì)退出阻塞狀態(tài),同時(shí)拋出InterruptedException。

       正在執(zhí)行的進(jìn)程由于發(fā)生某時(shí)間(如I/O請(qǐng)求、申請(qǐng)緩沖區(qū)失敗等)暫時(shí)無(wú)法繼續(xù)執(zhí)行。此時(shí)引起進(jìn)程調(diào)度,OS把處理機(jī)分配給另一個(gè)就緒進(jìn)程,而讓受阻進(jìn)程處于暫停狀態(tài),一般將這種狀態(tài)稱為阻塞狀態(tài)。

進(jìn)程的掛起

      掛起進(jìn)程在操作系統(tǒng)中可以定義為暫時(shí)被淘汰出內(nèi)存的進(jìn)程,機(jī)器的資源是有限的,在資源不足的情況下,操作系統(tǒng)對(duì)在內(nèi)存中的程序進(jìn)行合理的安排,其中有的進(jìn)程被暫時(shí)調(diào)離出內(nèi)存,當(dāng)條件允許的時(shí)候,會(huì)被操作系統(tǒng)再次調(diào)回內(nèi)存,重新進(jìn)入等待被執(zhí)行的狀態(tài)即就緒態(tài),系統(tǒng)在超過(guò)一定的時(shí)間沒(méi)有任何動(dòng)作

共同點(diǎn): 
           1. 進(jìn)程都暫停執(zhí)行 
            2. 進(jìn)程都釋放CPU,即兩個(gè)過(guò)程都會(huì)涉及上下文切換

不同點(diǎn): 
           1. 對(duì)系統(tǒng)資源占用不同:雖然都釋放了CPU,但阻塞的進(jìn)程仍處于內(nèi)存中,而掛起的進(jìn)程通過(guò)“對(duì)換”技術(shù)被換出到外存(磁盤(pán))中。 
           2. 發(fā)生時(shí)機(jī)不同:阻塞一般在進(jìn)程等待資源(IO資源、信號(hào)量等)時(shí)發(fā)生;而掛起是由于用戶和系統(tǒng)的需要,例如,終端用戶需要暫停程序研究其執(zhí)行情況或?qū)ζ溥M(jìn)行修改、OS為了提高內(nèi)存利用率需要將暫時(shí)不能運(yùn)行的進(jìn)程(處于就緒或阻塞隊(duì)列的進(jìn)程)調(diào)出到磁盤(pán) 
           3. 恢復(fù)時(shí)機(jī)不同:阻塞要在等待的資源得到滿足(例如獲得了鎖)后,才會(huì)進(jìn)入就緒狀態(tài),等待被調(diào)度而執(zhí)行;被掛起的進(jìn)程由將其掛起的對(duì)象(如用戶、系統(tǒng))在時(shí)機(jī)符合時(shí)(調(diào)試結(jié)束、被調(diào)度進(jìn)程選中需要重新執(zhí)行)將其主動(dòng)激活
 

阻塞的原因:線程中的阻塞、Socket客戶端的阻塞、Socket服務(wù)器端的阻塞

一般線程中的阻塞:

        A、線程執(zhí)行了Thread.sleep(int millsecond);方法,當(dāng)前線程放棄CPU,睡眠一段時(shí)間,然后再恢復(fù)執(zhí)行

        B、線程執(zhí)行一段同步代碼,但是尚且無(wú)法獲得相關(guān)的同步鎖,只能進(jìn)入阻塞狀態(tài),等到獲取了同步鎖,才能回復(fù)執(zhí)行。

        C、線程執(zhí)行了一個(gè)對(duì)象的wait()方法,直接進(jìn)入阻塞狀態(tài),等待其他線程執(zhí)行notify()或者notifyAll()方法。

        D、線程執(zhí)行某些IO操作,因?yàn)榈却嚓P(guān)的資源而進(jìn)入了阻塞狀態(tài)。比如說(shuō)監(jiān)聽(tīng)system.in,但是尚且沒(méi)有收到鍵盤(pán)的輸入,則進(jìn)入阻塞狀態(tài)。

Socket客戶端的阻塞:

        A、請(qǐng)求與服務(wù)器連接時(shí),調(diào)用connect方法,進(jìn)入阻塞狀態(tài),直至連接成功。

        B、當(dāng)從Socket輸入流讀取數(shù)據(jù)時(shí),在讀取足夠的數(shù)據(jù)之前會(huì)進(jìn)入阻塞狀態(tài)。比如說(shuō)通過(guò)BufferedReader類使用readLine()方法時(shí),在沒(méi)有讀出一行數(shù)據(jù)之前,數(shù)據(jù)量就不算是足夠,會(huì)處在阻塞狀態(tài)下。

        C、調(diào)用Socket的setSoLinger()方法關(guān)閉了Socket延遲,當(dāng)執(zhí)行Socket的close方法時(shí),會(huì)進(jìn)入阻塞狀態(tài),知道底層Socket發(fā)送完所有的剩余數(shù)據(jù)

Socket服務(wù)器的阻塞:

        A、線程執(zhí)行ServerSocket的accept()方法,等待客戶的連接,直到接收到客戶的連接,才從accept方法中返回一個(gè)Socket對(duì)象

        B、從Socket輸入流讀取數(shù)據(jù)時(shí),如果輸入流沒(méi)有足夠的數(shù)據(jù),就會(huì)進(jìn)入阻塞狀態(tài)

        D、線程向Socket的輸出流寫(xiě)入一批數(shù)據(jù),可能進(jìn)入阻塞狀態(tài)

        當(dāng)程序阻塞時(shí),會(huì)降低程序的效率,于是人們就希望能引入非阻塞的操作方法。    

        所謂非阻塞方法,就是指當(dāng)線程執(zhí)行這些方法時(shí),如果操作還沒(méi)有就緒,就立即返回,不會(huì)阻塞著等待操作就緒。Java.nio 提供了這些支持非阻塞通信的類。

掛起的原因

(1)終端用戶的請(qǐng)求。當(dāng)終端用戶在自己的程序運(yùn)行期間發(fā)現(xiàn)有可疑問(wèn)題時(shí),希望暫停使自己的程序靜止下來(lái)。亦即,使正在執(zhí)行的進(jìn)程暫停執(zhí)行;若此時(shí)用戶進(jìn)程正處于就緒狀態(tài)而未執(zhí)行,則該進(jìn)程暫不接受調(diào)度,以便用戶研究其執(zhí)行情況或?qū)Τ绦蜻M(jìn)行修改。我們把這種靜止?fàn)顟B(tài)成為“掛起狀態(tài)”。

(2)父進(jìn)程的請(qǐng)求。有時(shí)父進(jìn)程希望掛起自己的某個(gè)子進(jìn)程,以便考察和修改子進(jìn)程,或者協(xié)調(diào)各子進(jìn)程間的活動(dòng)。
(3)負(fù)荷調(diào)節(jié)的需要。當(dāng)實(shí)時(shí)系統(tǒng)中的工作負(fù)荷較重,已可能影響到對(duì)實(shí)時(shí)任務(wù)的控制時(shí),可由系統(tǒng)把一些不重要的進(jìn)程掛起,以保證系統(tǒng)能正常運(yùn)行。
(4)操作系統(tǒng)的需要。操作系統(tǒng)有時(shí)希望掛起某些進(jìn)程,以便檢查運(yùn)行中的資源使用情況或進(jìn)行記賬。
(5)對(duì)換的需要。為了緩和內(nèi)存緊張的情況,將內(nèi)存中處于阻塞狀態(tài)的進(jìn)程換至外存上。

操作系統(tǒng)中睡眠、阻塞、掛起的區(qū)別形象解釋:


     首先這些術(shù)語(yǔ)都是對(duì)于線程來(lái)說(shuō)的。對(duì)線程的控制就好比你控制了一個(gè)雇工為你干活。你對(duì)雇工的控制是通過(guò)編程來(lái)實(shí)現(xiàn)的。

     掛起線程的意思就是你對(duì)主動(dòng)對(duì)雇工說(shuō):“你睡覺(jué)去吧,用著你的時(shí)候我主動(dòng)去叫你,然后接著干活”。

     使線程睡眠的意思就是你主動(dòng)對(duì)雇工說(shuō):“你睡覺(jué)去吧,某時(shí)某刻過(guò)來(lái)報(bào)到,然后接著干活”。

     線程阻塞的意思就是,你突然發(fā)現(xiàn),你的雇工不知道在什么時(shí)候沒(méi)經(jīng)過(guò)你允許,自己睡覺(jué)了,但是你不能怪雇工,因?yàn)楸緛?lái)你讓雇工掃地,結(jié)果掃帚被偷了或被鄰居家借去了,你又沒(méi)讓雇工繼續(xù)干別的活,他就只好睡覺(jué)了。至于掃帚回來(lái)后,雇工會(huì)不會(huì)知道,會(huì)不會(huì)繼續(xù)干活,你不用擔(dān)心,雇工一旦發(fā)現(xiàn)掃帚回來(lái)了,他就會(huì)自己去干活的。因?yàn)楣凸な苓^(guò)良好的培訓(xùn)。這個(gè)培訓(xùn)機(jī)構(gòu)就是操作系統(tǒng)。

 

 

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
線程總結(jié)
Java線程總結(jié)[圖]
關(guān)于Java中的程序,進(jìn)程和線程的詳解...
深入淺出:JAVA多線程編程實(shí)戰(zhàn)-基礎(chǔ)篇
Java多線程
初探Nginx架構(gòu)之進(jìn)程模型與事件處理機(jī)制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服