1. 程式人生 > >多執行緒(2):程序的三種基本狀態及其轉換

多執行緒(2):程序的三種基本狀態及其轉換

程序的基本狀態:
①就緒(Ready)狀態
當程序已分配到除CPU以外的所有必要資源後,只要再獲得CPU,便可立即執行,程序這時的狀態就稱為就緒狀態。在一個系統中處於就緒狀態的程序可能有多個,通常將他們排成一個佇列,稱為就緒佇列。
②執行狀態
程序已獲得CPU,其程式正在執行。在單處理機系統中,只有一個程序處於執行狀態;在多處理機系統中,則有多個程序處於執行狀態。
③阻塞狀態
正在執行的程序,由於等待某個事件發生而無法執行時,便放棄處理機而處於阻塞狀態。引起程序阻塞的事件可有多種,例如,等待I/O完成、申請緩衝區不能滿足、等待信件(訊號)等。

程序三種狀態間的轉換
程序狀態變遷圖
這裡寫圖片描述
一個程序在執行期間,不斷地從一種狀態轉換到另一種狀態,它可以多次處於就緒狀態和執行狀態,也可以多次處於阻塞狀態。
①就緒→執行處於就緒狀態的程序,當程序排程程式為之分配了處理機後,該程序便由就緒狀態轉變成執行狀態。
②執行→就緒處於執行狀態的程序在其執行過程中,因分配給它的一個時間片已用完而不得不讓出處理機,於是程序從執行狀態轉變成就緒狀態。
③執行→阻塞正在執行的程序因等待某種事件發生而無法繼續執行時,便從執行狀態變成阻塞狀態。
④阻塞→就緒處於阻塞狀態的程序,若其等待的事件已經發生,於是程序由阻塞狀態轉變為就緒狀態。

相關推薦

執行2程序基本狀態及其轉換

程序的基本狀態: ①就緒(Ready)狀態 當程序已分配到除CPU以外的所有必要資源後,只要再獲得CPU,便可立即執行,程序這時的狀態就稱為就緒狀態。在一個系統中處於就緒狀態的程序可能有多個,通常將他們排成一個佇列,稱為就緒佇列。 ②執行狀態 程序已獲得CPU,其程式正在執行。在單處理機系統中,只有一

執行2synchronized關鍵字

  多執行緒操作相同資源的時候,會出現執行緒安全的問題,導致結果與預期的不一致。   如下例子,設計四個執行緒,其中兩個對執行緒對變數加1操作,兩個執行緒對變數減1操作。理想狀態是,執行緒順序執行,相同次數的加減操作,最後變數的值不變。 1.執行緒不安全的操作 p

python爬蟲入門八:多程序/多執行緒 python佇列Queue Python多執行緒(2)——執行緒同步機制 python學習筆記——多程序中共享記憶體Value & Array python 之 多程序 Python多程序 Python 使用multiprocessing 特別耗記

什麼是多執行緒/多程序 引用蟲師的解釋: 計算機程式只不過是磁碟中可執行的,二進位制(或其它型別)的資料。它們只有在被讀取到記憶體中,被作業系統呼叫的時候才開始它們的生命期。 程序(有時被稱為重量級程序)是程式的一次執行。每個程序都有自己的地址空間,記憶體,資料棧以及其它記錄其執行軌跡的輔助資料

Java執行執行程序

1.執行緒和程序 1.1 程序 程序是作業系統的概念,我們執行的一個TIM.exe就是一個程序。 程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計

C#執行2建立執行

一:建立新執行緒 在C#裡,執行緒是一種已經定義好的類,其被定義在System.Threading名稱空間內,因此建立新執行緒和我們例項化物件並沒有本質的差別。在這裡,用一個最簡單的例子說明如何建立新執行緒。 (一):建立新的控制檯程式,在控制檯程式的主函式下面,寫一個希望在新執行緒中呼叫的

執行1繼承Thread類和實現Runnable介面

多執行緒的兩種實現方法: 1.繼承Thread類     繼承Thread類,重寫run()方法。建立多執行緒的時候,需要建立物件例項,然後呼叫start()方法。類物件的屬性屬於執行緒私有,執行緒之間互不影響。 public class ClassExtendT

Java執行執行基礎及建立

(一)、執行緒的生命週期 新建狀態: 使用 new 關鍵字和 Thread 類或其子類建立一個執行緒物件後,該執行緒物件就處於新建狀態。它保持這個狀態直到程式 start() 這個執行緒。 就緒狀態: 當執行緒物件呼叫了start()方法之後,該執行緒就進入就緒

java執行2 —sychronized

越努力越幸運!  sychronized篇 一. sychronized的介紹 在Java中內建了語言級的同步原語--synchronized synchronized是通過互斥達到同步的。 二. sychronized的應用 synchronized關

Java執行2—— 執行實現之繼承Thread類

1.1、使用多執行緒 一個程序在執行時至少會有1個執行緒在執行,執行緒會在後臺執行;例如呼叫public static void main() 方法的執行緒就是如此,而且由JVM建立。 package

Java中的執行2

概述: 上一篇文章簡單的介紹了什麼是執行緒,以及執行緒的生命週期,還有建立執行緒的三種方式。接著本篇文章將總結有關執行緒同步的相關知識,主要講解使用synchronized實現執行緒同步。然後總結Java中鎖機制,明確什麼是物件鎖,什麼是類鎖。然後下篇文章講解關於Lock的

java執行1執行的建立和執行的安全問題

前言 java多執行緒多用於服務端的高併發程式設計,本文就java執行緒的建立和多執行緒安全問題進行討論。 正文 一,建立java執行緒 建立java執行緒有2種方式,一種是繼承自Thread類,另一種是實現Runnable介面。由於java只支援單

執行2-- yield( )

使當前執行緒從執行狀態(執行狀態)變為可執行態(就緒狀態)。cpu會從眾多的可執行態裡選擇,也就是說,當前也就是剛剛的那個執行緒還是有可能會被再次執行到的,並不是說一定會執行其他執行緒而該執行緒在下一

執行——暫停、恢復、停止執行較好的方式,sleep/wait/yield區別

不推薦的 大家都知道:suspend()、resume()、stop()這些方法已經被廢棄了。suspend()、resume()如果使用不當,容易造成公共的同步物件資源的獨佔以及導致資料不同步。用官網的話說: This method has

執行2-synchronized方法和synchronized程式碼塊的用法

  前言        在介紹synchronized方法和synchronized程式碼塊前,先對監視器(Monitor)做一個說明,在java虛擬機器中,每個物件(object和class)通過某種邏輯關聯監視器,每個監視器和一個物件引用

執行ThreadLocal 關鍵字

包括: 一. 什麼是 ThreadLocal 二. ThreadLocal 類中的方法簡介 三. 如何使用ThreadLocal      3.1 3個執行緒共享一個物件,各自產生序列號     

Java進階 ——— Java執行程序執行

引言 講到執行緒,不可避免的提到程序。而因為執行緒無法脫離程序單獨存在,那什麼是程序? 延伸閱讀,Java多執行緒系列文章 什麼是程序? 程序:具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的最小單位。 例如手機執行的眾多

java執行2---基於ExecutorService的socket通訊執行

package socketPool; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import ja

深入理解系列之JAVA執行2——synchronized同步原理

多執行緒中為了解決執行緒安全問題,一個重要的手段就是同步!所謂同步其實就是使得原本各個執行緒交叉執行(非同步),變成排隊執行(同步)。同步策略使得不同執行緒操作共享資料遵循“先來後到“,從而避免某個執行緒沒有處理完資料就被另一執行緒搶佔操作出現資料被覆蓋或

python執行2--thread和threading模組的使用

thread模組 python不推薦使用這個模組,推薦更高階的threading。 thread模組和物件 函式 描述 start_new_thread(function,

Java執行Thread類

Thread類的例項方法 start() start方法內部會呼叫方法start方法啟動一個執行緒,該執行緒返回start方法,同時Java虛擬機器呼叫native start0啟動另一個執行緒呼叫run方法,此時有兩個執行緒並行執行; 我們來分析下start0方法,start0到底是如何呼叫run方法的