因為專案需要學習多執行緒,從最基本的概念學起:
程序:就是正在執行的應用程式;抽象的講,程序是一些所有權的集合,擁有自己的記憶體、cpu執行時間等一系列資源,為執行緒執行提供必要環境。每個程序都有自己的位址空間和動態分配的記憶體以及檔案、執行緒和其他一些模組。程序是正在執行程式的抽象。乙個程序的狀態有如下幾種:
1.執行
2.就緒(當前能夠執行但由於系統正在執行其他程序而需要等待)
3.堵塞(由於得不到所需要的資源或者其他原因,當前程序不能進行,需要等待外部事件的發生)
程序只是表達了所有權概念,執行緒才是程式的最小執行單位。執行緒就是程式的一條執行路徑,是作業系統分配cpu時間的基本實體。乙個程序以乙個主線程開始,如果需要還可以建立更多執行緒。乙個程序中多個執行緒共享程序內的公共資源,同一程序所有執行緒共享同樣的虛擬位址空間、全域性變數。
程式:乙個靜態的指令序列;
程序:為執行程式指令的執行緒而保留的一系列資源的集合;
執行緒:作業系統分配排程的最小單位
win2000 程序包含如下幾個部分:
1)乙個可執行指令的集合;
2)乙個私有的虛擬位址空間,即一系列該程序可用的虛擬記憶體位址的集合;
3)系統資源,包括訊號量、通訊埠、檔案等;
4)至少有乙個執行緒執行
5)程序id號
單執行緒和多執行緒:
傳統計算機,只能執行完乙個任務後再去執行另外乙個;即使在多程序共享很多資源時,也要為每個程序單獨分配資源,實際上很難做到資源共享。
多執行緒:提高工作效率和資源有效利用,採用多執行緒的思想;在多執行緒環境中,乙個程序的多個執行緒可同時執行,多個執行緒共享程序資源;
2.互斥量:互斥量工作方式和臨界段非常相似;區別在於互斥量不僅保護乙個程序中的資源共享,而且還保護系統中程序之間的資源共享。它通過為互斥量提供乙個「互斥量名」來進行程序間資源共享協調的;
3.事件:事件物件用於給執行緒傳遞訊號,指示執行緒中特定的操作可以開始或結束。除非執行緒收到該事件,否則被掛起,當事件物件進入其訊號狀態時,正在等待該事件的執行緒就可以開始執行。
4.訊號量:與互斥量相似,但是互斥量只允許在同一時刻,乙個執行緒訪問它的資料,而訊號量允許多個執行緒在同一時刻訪問它的資料;
這些核心物件的建立都是呼叫不同win32函式生成的,核心物件實際上是由系統核心分配的一塊記憶體,而且只能由核心來訪問,這個記憶體塊是乙個資料結構,其成員包括了該物件的資訊。一定要記住:
核心物件的資料結構只能由核心訪問,應用程式不能再記憶體中定位這些資料結構,也不可直接改變他們的內容,只能通過win32api函式來操作這些核心物件及其對應的資料結構。當呼叫建立核心物件的api函式,返回乙個用於代表該物件的控制代碼,它可以被程序中所有的執行緒使用。
可通過如下機制使得多個程序共享某個核心物件:
1.物件控制代碼繼承。當程序之間存在父子關係時,可以使用物件的控制代碼繼承方法來讓子程序繼承父程序的控制代碼;
2.使用命名物件,
3.複製物件控制代碼;
虛擬記憶體:現在的windows採用32位定址,每個程序都被分配4g虛擬位址空間,乙個32位的位址代表了記憶體中的乙個位址,系統將32位位址轉換到4g的虛擬位址空間。在一般系統中,系統將2g分配給作業系統內部使用,另一半分配給程序,作為程序的私有儲存。
物件和控制代碼:
物件:指乙個靜態定義的物件型別(類)的乙個執行例項。
控制代碼:在系統建立物件後返回的用來代表該物件的乙個值。通過控制代碼使用者就可以對物件進行訪問,他代表對物件的引用。至於控制代碼的值具體是多少,不需要關心,我們只需要知道這個控制代碼值對應該物件,查詢控制代碼從而找到該物件,就比如你的身份證id號對應你的人一樣。
安全屬性:核心物件被乙個安全描述符保護,安全描述符是針對核心物件而言,每個核心在建立都可以指定安全描述符。但使用者物件或其他物件都不能指定安全描述符。物件的安全描述符描述了誰建立了該物件、誰能訪問、誰不能訪問一系列安全屬性。
多執行緒學習筆記(1)
很久之前在east演算法裡面見到了多執行緒,一直沒太注意,現在想利用零碎時間學習一下,現在進入我們的第一課。多執行緒就是多個任務分給多個人做,這裡讓我們看幾個用到的函式 import threading import time from queue import queue defthread jo...
Java多執行緒學習(1) 停止執行緒
呼叫interrupt方法只是對執行緒做了乙個標記 停止標記 並沒有停止執行緒的效果,需要結合以下兩種方法 如果呼叫了interrupt 方法,interrupted 返回true,看乙個例子 threadtest thread new threadtest thread.start thread....
Linux多執行緒學習筆記 1
smp意為多程序對稱處理,用來指代多個處理器可以共享同一記憶體和各種io裝置的硬體架構,如果乙個處理器有多個核心,那麼smp會把每個核心作為乙個處理器來對待。每乙個任務 作業系統排程的最小單位 只能在同乙個處理器執行,不存在同一任務在多個處理器上同時執行,原因是每個處理器可以處理任意乙個任務,無論這...