Python成長筆記 - 基礎篇 (十一)

回顧:
線程:資源的集合;內存共享,兩個或多個線程同時修改一份數據時,形成結果可能不正確,必須加鎖
進程:運行的最小單元
守護進程:在start以前設置setDemo()
隊列queue:做用解耦,使程序之間是實現鬆耦合,提升處理效率
FIFO:先進先出
LIFO:後進先出
隊列中的數據使用完就沒了(消費者生產者模型)
事件event:(紅綠燈模型)
 
 
python中的多線程是一個假象,咱們是利用它上下文切換
io操做不佔用CPU,計算操做佔用CPU,
python中大量的計算反而會使程序變得更慢
python的多線程不適合CPU密集操做型的任務,適合io密集型的任務
 
進程之間不能互相訪問,不須要鎖的概念
多進程能夠解決多核的問題
每個子進程都是由它的父進程啓動的,主進程自己的父進程是python自己
 
 
 
 
 
if __name__ =="__main__" 手動執行時會執行下面的代碼,如果當成一個模塊讓其餘調用則不執行
 
:微線程,一種用戶態的輕量級線程,在單線程下實現併發的效果,cpu根本不知道,單線程,不須要鎖。協程跑在線程上,線程跑在進程中。
單線程是串行的
在單線程下實現併發的效果:各協程遇到IO操做就切換,只剩下CPU運算;何時再切回去???IO操做完了就切回去,程序自動檢測IO操做完了
 
 
 
異步IO
論事件驅動和異步IO
 
 
IO 多路複用
 
用戶空間和內存空間:
進程切換:保存上下文
進程的阻塞:
文件描述符:用於表述指向文件的引用的抽象化的概念,一個非負整數,一個索引值
文件句柄:實際存在的
緩存I/O:數據會先被拷貝到操做系統內核的緩衝區中,而後纔會從操做系統內核的緩衝區拷貝到應用程序的地址空間。
 
內核態到用戶態的數據切換:用戶態沒有權限直接對內核進行操做,只能調用內核的接口,由操做系統的內核進行操做
 
二 IO模式
阻塞I/O:
非阻塞I/O:
 
I/O多路複用
 
select 把收到的多個socket發送給內核,有一個連接活躍,內核就將檢測到的內容返回給用戶(可是不告訴用戶是哪一個連接活躍),讓用戶確認再調用
 
異步I/O
內核處理完,直接將數據拷貝到用戶態,不會產生block
 
 
 
I/O多路複用三種模式:
select 
poll 
epoll 
和select比較,好處:沒有最大檢測數的限制,
返回連接響應
相關文章
相關標籤/搜索