程序是程式的分配資源的最小單元;乙個程式可以有多個程序,但只有乙個主程序;程序由程式、資料集、控制器三部分組成。
執行緒是程式最小的執行單元;乙個程序可以有多個執行緒,但是只有乙個主線程;執行緒切換分為兩種:一種是i/o切換,一種是時間切換(i/o切換:一旦執行i/o任務時便進行執行緒切換,cpu開始執行其他執行緒;時間切換:一旦到了一定時間,執行緒也進行切換,cpu開始執行其他執行緒)。
乙個程式至少有乙個程序和乙個執行緒;
程式的工作方式:
1.單程序單執行緒;2.單程序多執行緒;3.多程序多執行緒;
考慮到實現的複雜性,一般最多隻會採用單程序多執行緒的工作方式;
我們在實際生活中,希望既能一邊瀏覽網頁,一邊聽歌,一邊打遊戲。這時,如果只開乙個程序,為了滿足需求,cpu只能快速切換程序,但是在切換程序時會造成大量資源浪費。所以,如果是多核cpu,可以在同時執行多個程序而不用進行程序之間的切換。
然而,在實際中,比如:你在玩遊戲的時候,電腦需要一邊顯示遊戲的動態,一邊你還得和同伴進行語音或語言進行溝通。這時,如果是單執行緒的工作方式,將會造成在操作遊戲的時候就無法給同伴溝通,在和同伴溝通的時候就無法操作遊戲。為了解決該問題,我們可以開啟多執行緒來共享遊戲資源,同時進行遊戲操作和溝通。
併發:在乙個時間段,處理多個任務,單核也可以併發(cpu分時間片);
並行:在同乙個時刻,處理多個任務,必須多核才能並行;
python實現併發的手段:1、作業系統提供:程序、執行緒;2、程式語言提供:協程:使用者空間的排程(py3);題外話:現在的作業系統,程序和執行緒的區別越來越小,因為程序越來越輕了;實際上,linux的執行緒是通過程序實現的;
'''多執行緒的引入需要匯入包'''
import threading
import time
# 定義乙個person類,有兩個方法敲**和抽菸
class
person
(object):
def__init__
(self, name)
: self.name = name
deftype_codes
(self)
:for i in
range(5
):print
('%s在敲**'
%self.name)
time.sleep(
0.01
)def
smoke
(self)
:for i in
range(5
):print
('%s在抽菸'
%self.name)
time.sleep(
0.01
)# 執行緒的執行是無序的
if __name__ ==
'__main__'
: xiaoming = person(
'小明'
) coding_thread = threading.thread(target=xiaoming.type_codes)
#建立執行緒
smoking_thread = threading.thread(target=xiaoming.smoke)
print
(threading.active_count())
# 活動執行緒的個數
smoking_thread.setdaemon(
true
)# 設定成主線程結束則銷毀,守護執行緒
coding_thread.setdaemon(
true
)# 有幾個執行緒都要守護
coding_thread.start(
)#開始執行緒
smoking_thread.start(
)print
(threading.
enumerate()
)# 函式顯示的是活動的執行緒數
print
('主線程結束'
) exit(
)
import threading
class
mythread
(threading.thread)
:def
__init__
(self, num)
:super
(mythread, self)
.__init__(
)# 一定要呼叫父類初始化
# threading.thread.__init__(self) # 這種方法也可以
self.num = num
defrun(self)
:# 這裡自定義執行緒執行時的函式
print
('此時呼叫'
)if __name__ ==
'__main__'
: thread = mythread(1)
thread.start(
)
Python多執行緒機制
今天要跟大家一起來學習一下python的多執行緒機制。有兩個原因,其一是自己在學習中經常會使用到多執行緒,其二當然是自己對python中的多執行緒並不是很了解。那麼,今天和大家一起了解下 python多執行緒機制 開發多執行緒的應用系統,是在日常開發中經常會遇到的需求。同時,python也為多執行緒...
python多執行緒鎖機制
在多執行緒程式設計中常用到的乙個概念就是鎖,它用於將執行緒需要獨佔的資源進行加鎖,使用後再進行釋放,防止死鎖發生。此處給出乙個不加鎖的多執行緒例子 實現整數n在每個執行緒內加1並列印 usr bin python coding utf 8 import threading import time c...
MFC下多執行緒與訊息機制的結合使用
這裡我用vc 6.0建立了乙個名為muti tread的對話方塊程式。在muti threaddlg.h header file 中新增 generated message map functions afx msg declare message map 在muti threaddlg.cpp i...