UDP協議和實戰、作業系統、多道技術、程序理論
阿新 • • 發佈:2022-04-18
一、UDP協議和實戰
二、作業系統的發展史
三、多道技術
四、程序理論
一、UDP協議
# 客戶端 import socket # 指定使用UDP協議, 不指定的話,預設為TCP協議 server = socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8888)) msg, addr = server.recvfrom(1024) # recvfrom 是UDP協議的接收 print(msg.decode('utf8')) # 解析傳送來的內容 print(addr) # 服務端的位置 server.sendto(b'wuhu, i am you father',addr) # 接收到('127.0.0.1', 52376)發來的hello i am superman
# 服務端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_addr = ('127.0.0.1', 8888)
client.sendto(b'hello i am superman', server_addr) # sendto就是UDP協議的傳送
msg, addr = client.recvfrom(1024)
print(msg.decode('utf8'))
print(addr)
# 接收到('127.0.0.1', 8888)發來的wuhu, i am you father
- 基於UDP實現建議版qq
# 服務端 import socket server = socket.socket(type= socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8888)) while True: msg, addr = server.recvfrom(1024) print(addr) print(msg.decode('utf8')) back_msg = input('請回覆信息>>>:').strip() server.sendto(back_msg.encode('utf8'),addr) # 客戶端 import socket client = socket.socket(type=socket.SOCK_DGRAM) server_addr = ('127.0.0.1', 8888) while True: msg = input('請輸入要輸入的內容>>>:').strip() msg = '這是來自客戶端1號發來的資訊: %s'%msg client.sendto(msg.encode('utf8'), server_addr) msg, addr = client.recvfrom(1024) print(msg.decode('utf8'), addr) # 增加新的客戶端時,程式碼不需要改變,只需要msg修改一些這是客戶n發來的資訊
二、作業系統的發展史
1.穿孔卡片
優勢: 一個人使用電腦
劣勢: cpu利用率極低
2.聯機批處理系統
一次性可以錄入多個使用者指令、 縮短了cpu等待的時間, 提高了cpu的利用率
3.離線批處理系統
是現代計算機核心部件的雛形、 提高CPU的利用率
三、多道技術
# 簡介:
多道技術中的多道指的是多個程式,多道技術的實現是為了解決多個程式競爭或者說共享同一個資源(比如cpu)的有序排程問題,解決方式即多路複用,多路複用分為時間上的複用和空間上的複用。
# 目的:提升cpu利用率, 降低程式等待時間
"""
我們目前研究併發都是要計算機為單核的情況
"""
序列:
在多個任務排隊執行,總耗時就是多個任務完整時間疊加
多道:
利用空閒提前準備,縮短了總的執行時間,並且還能提高CPU的利用率
# 多道技術特點
1、空間上的複用
多個任務共用一套計算機硬體
2、時間上的複用
切換 + 儲存狀態
# CPU在兩種情況下會被拿走
1、程式遇到IO操作, CPU自動執行其他程式
2、程式長時間佔用CPU,系統發現之後會強行切走CPU,保證其他程式也能夠正常執行使用
- 程序理論
# 程式和程序理論
程式: 就是一堆沒有被執行的程式碼(沒有執行的)
程序: 和程式相反, 它是正在執行的程式(在執行的)
# 程序
為了更加精準的描述出一些的實際狀態
# 程序排程演算法發展史
1、先來先服務
當長作業執行時,後面來的就要等著它的結束,所以當有短作業想要執行時,就很麻煩,要等
2、短作業優先
都是如果短作業很多時,對長作業就又不友好了
3、時間片輪轉法和多級反饋佇列
時間片輪法: 先公平的將CPU分給每個程式執行
多級反饋佇列: 根據作業的長短,從而做不同的分配CPU執行時間
- 重要概念(四星)
# 併發和並行
# 併發: 就是看上去在同時執行就可以稱之為併發
eg:
飯店裡面有很多座客人(等待被執行的任務)
但是隻有一個服務員(cpu)
就是每座客人剛來的時候,就給他選單讓他看,第二桌來的時候立馬去給他選單,三號座來了也是這樣操作,然後一號點單,二、三號看選單,這樣每座都在被執行,並儲存狀態
"""這個過程就是讓CPU在對個程式之間利用多道技術來回切換+儲存狀態
單核能夠實現併發, 但是不能實現並行
"""
# 並行:必須同一時間同時被執行,才能稱之為並行
"""
單核計算機肯定不能實現並行, 必須要有多個CPU
"""
# 高併發和高並行
高併發: 就是程式能夠支援幾個億的併發量
就是這幾個億的使用者來到可以感受到自己被服務著的意思
高並行: 寫的軟體可以支援幾個億的並行(當然我們還是無法實現)
支援幾個億的並行,就代表這個計算機要有幾個億的CPU,
- 重要概念(五星)
# 同步和非同步
同步:
提交完任務之後原地等待任務的返回值,這個期間不去做其他的事情
非同步:
提交完任務之後直接做其他的事情, 有結果了就會自動提醒
# 阻塞和非阻塞
程序三狀態圖
就緒態: 程式之執行態之前肯定要處於就緒態
執行態: 程度被CPU執行著
阻塞態: 程式執行過程中有IO操作
"""
如果想要T提高程式被執行效率
就要程式一直處於就緒態和執行態
"""
所以:
阻塞: 阻塞態
非阻塞:就緒態、執行態
- 同步非同步和阻塞非阻塞組合
同步非同步:用來描述任務的提交方式
阻塞非阻塞: 用來描述任務的執行狀態
同步+阻塞:
銀行排隊辦理業務,期間可不做任何事,就等著
同步+非阻塞:
銀行排隊辦理業務,期間可以去做一些其他的事,但是人還在辦理業務的佇列中
非同步阻塞:
在椅子上坐著,不做任何事
非同步非阻塞:
在椅子上面坐著,在期間喝水、吃東西、工作、玩手機、、(這個過程就是把程式執行到了極致)