以下內容如有錯誤請指出
什麼是程序?
程序: 程式在計算機中的一次執行,程式是靜態的,程序是動態的過程,具有一定的生命週期
程序的狀態
孤兒程序: 父程序先於子程序退出,子程序成為了孤兒
殭屍程序: 子程序先於父程序退出,但是父程序未處理子程序的退出狀態,子程序成為了殭屍
殭屍程序的3種解決辦法
1.使用os.wait()來阻塞父程序,等待父程序處理子程序的退出狀態
import os, sys, timepid = os.fork()
if pid < 0:
print("建立子程序失敗")
elif pid == 0:
print("子程序空間")
time.sleep(0.5)
sys.exit(0)
else:
while true:
pid, status = os.wait()
print("父程序空間")
print(os.getgid(), pid, status)
break
2. 建立二級子程序處理殭屍程序,子程序建立二級子程序後退出,此時二級子程序變為孤兒程序,收歸到系統程序
import os, syspid = os.fork()
if pid < 0:
print("建立子程序失敗")
elif pid == 0:
print("子程序空間")
cpid = os.fork()
if cpid < 0:
print("建立二級子程序失敗")
elif cpid == 0:
print("二級子程序空間")
else:
sys.exit(0)
else:
os.wait()
print("父程序空間")
3. 通過訊號處理子程序退出
signal.signal(signal.sigchld,signal.sig_ign)
python多程序程式設計方法
1. mutilprocessing建立程序,join阻塞等待子程序退出
import osfrom multiprocessing import process
def run():
print(f"working..., , ")
pool =
for _ in range(5):
process = process(target=run)
process.start()
for process in pool:
process.join()
2. pool程序池機制
import os, time, randomfrom multiprocessing import pool
def run():
print(f"working..., , ")
time.sleep(random.random())
pool = pool(2)
for _ in range(5):
pool.close()
pool.join()
3. processpoolexecutor程序池機制
import osfrom concurrent.futures import processpoolexecutor
def run(msg):
print(f"working..., , , ")
with processpoolexecutor(max_workers=2) as exec:
exec.map(run, [i for i in range(5)])
程序間通訊
由於程序空間互相獨立,資源不共享,此時在程序間傳輸資料需要特定的手段進行資料通訊
程序間通訊的幾種方法: 訊號,訊號量,訊息佇列,管道,共享記憶體,套接字
**待續...
什麼是執行緒?
執行緒: 是程序的子任務,是一種多工程式設計方式,是系統分配核心的最小單元
python多執行緒程式設計方法
1. threading建立程序,join阻塞等待子程序退出
from threading import threaddef run():
print(f"working...")
pool =
for _ in range(5):
thread = thread(target=run)
thread.start()
for thread in pool:
thread.join()
2. threadpoolexecutor執行緒池機制
from concurrent.futures import threadpoolexecutordef run(msg):
print(f"working..., ")
with threadpoolexecutor(max_workers=2) as exec:
exec.map(run, [i for i in range(5)])
執行緒間通訊
由於多個執行緒共享乙個資源,資料處理不好便會混亂
執行緒間通訊的方法: 執行緒鎖,執行緒的event
**待續...
python的gil
gil: python直譯器設計中加入了直譯器鎖,導致直譯器同一時刻只能解釋執行乙個執行緒,大大降低了執行緒的執行效率
後果: 無阻塞狀態下,多執行緒效率和單執行緒幾乎差不多
gil問題建議: 盡量使用程序完成無阻塞的並發行為,不使用c作為直譯器
程序和執行緒的相關總結
使用場景
關於iOS多工的一些掃盲
打從這世界出現了作業系統以來,就沒有過所謂真正的 多工 所謂多工,無非是cpu速度夠快而足以支撐極短時間內在多個程序內動作罷了。而所謂的 單任務 無非是只能讓當前任務獨享資源罷了。1.儲存現場。按下home鍵10秒內直接殺死程序,並釋放記憶體。2.ios支援的 多工 按下home鍵轉入多工狀態,保留...
對程式設計的一些思考
1.程式 是程式設計思想的體現 我想程式設計人員在設計程式之初,肯定會有一番思考。思考主要是程式設計的目的,然後是實現目的的方法,最後才是 的實現。所以,程式 是程式設計思想的體現。分析 的啟示 我們分析程式 時,可以在看 之前,想想這個 要幹什麼事,然後再去看 就容易多了。程式設計的啟示 先思考程...
對程式設計的一些感悟總結
如果您想學習電腦程式設計,卻又不知從何入手,那麼您不妨看看下面的幾種學習方案,可能會給您一些啟示吧!方案一 basic語言 visual basic 優點 1 basic 簡單易學,很容易上手。2 visual basic 提供了強大的視覺化程式設計能力,可以讓你輕鬆地做出漂亮的程式。3 眾多的控制...