1. 程式人生 > 其它 >UDP協議和實戰、作業系統、多道技術、程序理論

UDP協議和實戰、作業系統、多道技術、程序理論

一、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提高程式被執行效率
       就要程式一直處於就緒態和執行態
  """
所以:
阻塞: 阻塞態
非阻塞:就緒態、執行態

  • 同步非同步和阻塞非阻塞組合
同步非同步:用來描述任務的提交方式
阻塞非阻塞: 用來描述任務的執行狀態

同步+阻塞:
  銀行排隊辦理業務,期間可不做任何事,就等著
同步+非阻塞:
  銀行排隊辦理業務,期間可以去做一些其他的事,但是人還在辦理業務的佇列中
    
非同步阻塞:
   在椅子上坐著,不做任何事
非同步非阻塞:
   在椅子上面坐著,在期間喝水、吃東西、工作、玩手機、、(這個過程就是把程式執行到了極致)