1. 程式人生 > >程序的阻塞和掛起的區別

程序的阻塞和掛起的區別

  • 理解一:掛起是一種主動行為,因此恢復也應該要主動完成,而阻塞則是一種被動行為,是在等待事件或資源時任務的表現,你不知道他什麼時候被阻塞(pend),也就不能確切 的知道他什麼時候恢復阻塞。而且掛起佇列在作業系統裡可以看成一個,而阻塞佇列則是不同的事件或資源(如訊號量)就有自己的佇列。
  • 理解二:阻塞(pend)就是任務釋放CPU,其他任務可以執行,一般在等待某種資源或訊號量的時候出現。掛起(suspend)不釋放CPU,如果任務優先順序高就永遠輪不到其他任務執行,一般掛起用於程式除錯中的條件中斷,當出現某個條件的情況下掛起,然後進行單步除錯。
  • 理解三:pend是task主動去等一個事件,或訊息.suspend是直接懸掛task,以後這個task和你沒任何關係,任何task間的通訊或者同步都和這個suspended task沒任何關係了,除非你resume task;
  • 理解四:任務排程是作業系統來實現的,任務排程時,直接忽略掛起狀態的任務,但是會顧及處於pend下的任務,當pend下的任務等待的資源就緒後,就可以轉為ready了。ready只需要等待CPU時間,當然,任務排程也佔用開銷,但是不大,可以忽略。可以這樣理解,只要是掛起狀態,作業系統就不在管理這個任務了。
  • 理解五:掛起是主動的,一般需要用掛起函式進行操作,若沒有resume的動作,則此任務一直不會ready。而阻塞是因為資源被其他任務搶佔而處於休眠態。兩者的表現方式都是從就緒態裡“清掉”,即對應標誌位清零,只不過實現方式不一樣。
作業系統中睡眠、阻塞、掛起的區別形象解釋:
     首先這些術語都是對於執行緒來說的。對執行緒的控制就好比你控制了一個僱工為你幹活。你對僱工的控制是通過程式設計來實現的。      掛起執行緒的意思就是你對主動對僱工說:“你睡覺去吧,用著你的時候我主動去叫你,然後接著幹活”。      使執行緒睡眠的意思就是你主動對僱工說:“你睡覺去吧,某時某刻過來報到,然後接著幹活”。      執行緒阻塞的意思就是,你突然發現,你的僱工不知道在什麼時候沒經過你允許,自己睡覺呢,但是你不能怪僱工,肯定你         這個僱主沒注意,本來你讓僱工掃地,結果掃帚被偷了或被鄰居家借去了,你又沒讓僱工繼續幹別的活,他就只好睡覺了。至於掃帚回來後,僱工會不會知道,會不會繼續幹活,你不用擔心,僱工一旦發現掃帚回來了,他就會自己去幹活的。因為僱工受過良好的培訓。這個培訓機構就是作業系統。

相關推薦

執行緒程序/阻塞

曾多次迷惑於阻塞和掛起狀態,後來才發現,有一些文章沒有區別,把(阻塞、掛起、等待)等同了,這時看語境作者說的是哪個。自己加以分析區別。 先大概這樣理解一下: 掛起:一般是主動的,由系統或程式發出,甚至於輔存中去。(不釋放CPU,可能釋放記憶體,放在外存) 阻塞:一般是被動的

程序阻塞區別

理解一:掛起是一種主動行為,因此恢復也應該要主動完成,而阻塞則是一種被動行為,是在等待事件或資源時任務的表現,你不知道他什麼時候被阻塞(pend),也就不能確切 的知道他什麼時候恢復阻塞。而且掛起佇列在作業系統裡可以看成一個,而阻塞佇列則是不同的事件或資源(如訊號量)就有自

程序的基本狀態及轉換阻塞的理解【轉】

就緒狀態 :一個程序獲得了除處理機外的一切所需資源,一旦得到處理機即可執行,則稱此程序處於就緒狀態。 執行狀態:當一個程序在處理機上執行時,則稱該程序處於執行狀態。 阻塞狀態:一個程序正在等待某一事件發生(例如請求I/O而等待I/O完成等)而暫時仃止執行,這時即使把處理機分配給程序也無法執行,故

【.NET】執行緒的暫停

C#中使得多執行緒暫停掛起的方法有多種,但各有不同。我逐個說明: sleep方法是個靜態方法,由thread類來呼叫。它只能暫停當前執行緒,不能暫停其他執行緒。它接受的引數指名這個執行緒需要休眠多少時間。 suspend方法是普通方法,由物件呼叫,他不但能夠終止

關於執行緒的停止

在用執行緒的時候經常要啟動和掛起,原來d7的時候可以用resume和suspend(但是,建議不要用這2個方法,因為這2個方法在作業系統層面會造成死鎖),現在版本的TThread裡已經把這2個方法宣告為deprecated(我用的是xe2,具體不知道從哪個版本起)。原來在D

java 執行緒間的通知處理 (wait/notify)

public class ThreadWaitNotifyTest{ private boolean flag = true; private void test(){ Object lock = new Object(); T

微信小程序開發h5的區別

分享 his 事件綁定 share 之間 cookie json doc jquer 1. 開發小程序時,每個頁面一定要在app.json文件中註冊,頁面文件夾和其包含的四個文件的名字要保持一致。 2. 小程序發起的都是HTTPS網絡請求,在開發調試的過程中可以不校驗協議

程序阻塞睡眠

轉:https://www.cnblogs.com/ck1020/p/6669661.html 要說掛起、阻塞、睡眠難免讓人想到程序生命週期中的阻塞態或者等待狀態,而掛起和睡眠卻沒有出現在程序生命週期中,說明這三個其實在本質上區別並不那麼大,但是既然稱呼不同,應該就有不同的道理。 先說阻塞,

阻塞區別以及sleepwait的區別

阻塞 VS 掛起 阻塞與掛起都是程序的狀態,但他們有一些相似之處,也有一些區別,下面先對他們進行概述,再進行比較 阻塞:正在執行的程序由於發生某時間(如I/O請求、申請緩衝區失敗等)暫時無法繼續執行。此時引起程序排程,OS把處理機分配給另一個就緒程序,而讓受阻程序處於暫停狀態,一般將這種狀態

Linux後臺程序管理以及ctrl+z()、ctrl+c(中斷)、ctrl+\(退出)ctrl+d(EOF)的區別

轉自:http://blog.csdn.net/fengyifei11228/article/details/5737371             http://idas643.blog.163.com/blog/static/1671048382013414938465

阻塞區別?sleep()wait()的區別

掛起和阻塞區別: (1)掛起是一種主動行為,因此恢復也應該要主動完成。而阻塞是一種被動行為,是在等待事件或者資源任務的表現,你不知道它什麼時候被阻塞,也不清楚它什麼時候會恢復阻塞。 (2)阻塞(pe

Linux後臺進程管理以及ctrl+z()、ctrl+c(中斷)、ctrl+(退出)ctrl+d(EOF)的區別(轉)

列表 art 信息 csdn 而是 png detail tps 後臺 一、後臺進程管理命令 fg、bg、jobs、&、ctrl + z、ctrl + c、ctrl + \、ctrl + d1、 &加在一個命令的最後,可以把這個命令放到後臺執行 ,如fire

作業系統——CPU記憶體、阻塞

CPU ≠ 記憶體 不妨把外存比作一個大倉庫,裡面有各種原材料,可以生產不同的東西。而CPU就是進行加工處理的車間。 一般來說,一個時間段,想要生產的東西也就那幾樣(是確定的,也是有限的,畢竟CPU也是有限的)。 產品確定了,原材料自然也是確定的。而當我們去取原

μCOS-Ⅱ作業系統中的PEND(阻塞zuse)SUSPEND()SLEEP(睡眠)三種狀態

掛起是一種主動行為,因此恢復也應該要主動完成; 阻塞,睡眠則是一種被動行為,是在等待事件或資源時任務的表現; 睡眠是一種半主動半被動的行為,到了某個時間點,被要求去睡覺,到了下一個確定時間點,自己主動起來繼續工作。 三者的表現方式都是    對應的任務優先順序從任務就

Linux程序恢復

程序的掛起及恢復 #ctrl+z:掛起,程式放到後臺,程式沒有結束。 #jobs:檢視被掛起的程式工作號 恢復程序執行時,有兩種選擇:fg命令將掛起的作業放回到前臺執行;用bg命令將掛起的作業放到後臺執行 格式:fg 工作號;bg 工作號 程序:正在執行的一個程式 程式:是一

阻塞(pend)”與“(suspend)”的區別

理解一:掛起是一種主動行為,因此恢復也應該要主動完成,而阻塞則是一種被動行為,是在等待事件或資源時任務的表現,你不知道他什麼時候被阻塞(pend),也就不能確切的知道他什麼時候恢復阻塞。而且掛起佇列在作業系統裡可以看成一個,而阻塞佇列則是不同的事件或資源(如訊號量)就有

linux進程的恢復

開始 順序 cpu 結束 足夠 cpu使用率 腳本 占用 command 進程的掛起及恢復 #ctrl+z:掛起,程序放到後臺,程序沒有結束。 #jobs:查看被掛起的程序工作號 恢復進程執行時,有兩種選擇:fg命令將掛起的作業放回到前臺執行;用bg命令將掛起的作業放到後臺

程序員”“碼農”究竟有什麽區別

pro 硬件 爆炸 https 工程學 得到 手機 rod tar 原文鏈接 很想心無旁騖的編碼,卻被產品經理、項目經理、測試、老板各種打擾,怎麽辦? 很想重構重構再重構,卻被構建、部署環境的各種坑拖累,什麽時候能夠擺脫哪些服務器、環境的雜活? 程序員一天中只能得到一段

WhatIsHang(程序查詢器)

進行 如何解決 tro 停止 get ref 作者 信息 href 軟件簡介: 有時,Windows或掛起運行的應用程序,用戶界面突然停止響應,並且您不能確定是什麽原因造成的問題,或如何解決該問題。此實用程序嘗試檢測軟件或進程正在掛起,並顯示一些信息,可能讓你進行梳

高級程序低級程序員的區別

工程 文章 忽略 自己 而不是 公司 .com 事物 mpi 低級程序員認為自己與高級程序員的區別, 主要是高級程序員任何功能都能編碼實現, 編碼速度快, 代碼無 bug. 正如一慣的那樣, 低級程序員之所以低級, 正是因為他們勉強能看到(或者根本看不到)事物的表象而看不到