11.5 11.6
1.TCP半連接池原理
什麽情況下會進入半連接池 來不及處理accept 或者客戶端單方面終止連接
2.UDP 通訊
寫代碼的區別 對比TCP
沒有listen
沒有accept
發送使用sendto 需要指定接收方的地址
recvfrom 緩沖區大小最大建議512 需要和發送方一樣大
3.UDP聊天 input會阻塞 導致recv無法立即獲取數據
4.TCP 和 UDP通訊的流程
需要先綁定端口
TCP 從操作系統緩存取出數據 發送給服務器 必須接收到服務器返回的確認包
更加安全
UDP 從操作系統緩存取出數據 發送給服務器 不需要確認 數據可能丟失
更加高效
5.什麽是進程
一個正在運行的程序稱之為進程
是一種抽象概念 表示一個執行某件事情的過程
進程的概念 起源於操作系統
第一代計算機 程序是固定 無法修改 某種計算機只能幹某種活
第二代批處理系統 需要人工參與 將程序攢成一批 統一執行
串行執行 提高計算機的的利用率 但是調試麻煩
第三代計算機 為了更好利用計算機資源,產生了
多道技術: ******
1.空間復用
內存分割為多個區域 每個區域存儲不同的應用程序
2.時間的復用
1.當一個程序遇到了I/O操作時 會切換到其他程序 (切換前需要保存當前運行狀態 以便恢復執行)
提高效率
2.當你的應用程序執行時間過長 操作系統會強行切走 以保證其他程序也能正常運行 當然因為cpu速度賊快 用戶感覺不到
降低效率
3.有一個優先級更高的任務需要處理 此時也會切走
降低了效率
我們編寫程序時 只能盡量減少I/O操作
總的來說 有了多道技術之後 操作系統可以同時運行多個程序吧 這種情形稱之為並發
但是本質好 這些程序還是一個一個排隊執行
並發
在同一個時間段內 發生的多個事情
並行
在同一時刻 同時進行多個事情
串行
許多任務排隊執行
第一個任務沒執行完 第二個只能等待
此時不叫阻塞 因為CPU執行權還在手裏 依然在執行你的代碼
第一個任務做不下去 i/o操作 此時就是阻塞 因為cpu被分配給其他進程
總結一下:只要還擁有cpu的執行權 就不叫阻塞
非阻塞
同步 和 異步
print("asasasasassasasasasasasdfsfsdfsdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
print("over")
input(">>>>:")
思考:多核處理器 能不能真正的並行?
可以 每個核可以單獨負責一個任務 這些任務可以同時進行
print("start")
# 我不讓當前進程做讀取這個事情 而是讓一個別的進程去讀 對於當前進程 就不會再阻塞
with open("XXXX") as f
f.read()
print("over")
11.5 11.6