執行緒:
乙個軟體的開啟可以理解為乙個程序,但是乙個軟體同事程序多種操作(如360同時防毒和優化os),理解為乙個程序下的兩個執行緒的執行;
程序執行更消耗cpu和記憶體,所以程序下建立多個執行緒multithreading
執行緒: 無法直接獲得cpu和記憶體的排程和分配,但是能共享程序獲得的(系統資源)cpu和記憶體下繼承和使用該部分cpu和記憶體;
是程式執行流的最小單元;
併發:即不同的執行緒或程序在不同的時間段輪流進行,只是因為時間特別短,微妙級別,肉眼識別不出來
並行:多個一起;
執行緒優點:
1、使用執行緒可以把佔據長時間的程式中的任務放到後台去處理;
2、使用者介面科一更加吸引人,同事開啟的多個介面就是多個 執行緒執行的體現;
3、程式的執行速度可以加快;
4、在一些等待的任務上(使用者輸入,檔案讀寫,網路收發資料),執行緒比較有用,在這中情況下我們可以釋放一些珍貴的資源,如記憶體的釋放;
執行緒的四個狀態:
新建—>就緒—>執行---->結束
1、建立後 視為新建狀態;
2、新建後 start 到達 就緒狀態
3、執行時,如果只有乙個執行緒,它執行結束後就不占用cpu,就結束
執行一次後至休眠(sleep(2)),此時也稱為阻塞,休眠過厚、後重新返回至就緒狀態,等待cpu的使用權;
乙個cpu,多個執行緒,乙個執行至休眠後,其餘等待的執行緒就可以獲得cpu的使用權而開始執行,但是先後無絕對,具體有cpu決定;
協程:又叫微執行緒,是python特有的,為了當有乙個協程阻塞停滯時,快速切換到其他協程執行,保證cpu的高效運轉,任務快速完成,
協程實現方法有三種:
1、生成器完成, 例如:g1=task1()
2、greenlet (第三方包)完成, ga=greenlet(a) ga.switch()
3、gevent.spawn完成, g1=gevent.spawn(a) g1.join() #表示任務a在主程序中插隊
greenlet已經實現了協程,但是這個需要人工切換,比較麻煩,python還有乙個強大而且能夠自動切換任務的模組,
gevent,其原理相當於 當乙個greenlet遇到io(指輸入,輸出,網路、檔案操作等耗時任務)操作時,比如訪問網路,
就自動化切換到其他的greenlet,等到io完成,在適當的時候再切換回來繼續執行,
由於io操作非常耗時,經常使程式處於等待狀態,有了gevent我們自動切換協程,就保證總有greenlet在
執行,(cpu一種在執行狀態,為浪費靜止),而不是等待io
url 和path時乙個意思,路徑 ,比如檔案路徑等;
訪問網路的強大模組:requests,但是不如其的類似作用的模組有 urllib,其獲得方法 response=urllib.read()
併發中,程序或執行緒只要 一sleep,就會轉讓執行權出去已占用的cpu資源,
python中線程是偽多執行緒,因為直譯器底層的鎖gil,只要建立執行緒就有 全域性直譯器鎖;
別的語言中需要鎖時才申**鎖;
c 協變 逆變複習
c 中泛型同c 中的stl基本類似。例子如下 using system class test public static void swap ref t a,ref t b 定義乙個泛型的方法 為了能使泛型介面引用子類物件時使用object型別來接受其它型別的物件,引入協變,例子如下 using s...
Golang協程實現流量統計系統(2)
fork系統呼叫用於建立乙個稱為子程序的新程序,該子程序與進行fork 呼叫的程序 父程序 同時執行。建立新的子程序後,兩個程序都將在fork 系統呼叫之後執行下一條指令。子程序使用與父程序相同的pc 程式計數器 相同的cpu暫存器,相同的開啟檔案。它不帶任何引數,並返回乙個整數值。以下是fork ...
C C 複習 成績統計(結構體)
all right reserved.檔名稱 77.cpp 作 者 董凱琦 完成日期 2016年4月26日 版 本 號 v1.0 問題描述 建立乙個簡單的學生資訊表,包括 姓名 性別 年齡及一門課程的成績,統計輸出學生的平均成績和不及格同學姓名和不及格人數。輸入描述 n 和 n個學生的姓名,性別,年...