day38 Pyhton 併發程式設計
阿新 • • 發佈:2018-12-07
# 網路程式設計 # arp協議 : # 1.這是一個通過ip找mac地址的協議 # 2.由於有了socket,使用者在使用網路的時候,只需要關心對方使用者的ip地址就可以了 # 3.如果使用者即將和這個ip進行通訊,那麼還需要知道它的mac地址 # 4.這個時候就需要由你的機器發起一個arp請求 # 5.由交換機進行廣播 # 6.對應的機器會迴應這個arp請求 # 7.通過交換機單播發給你的機器 # tcp協議和udp協議的特點? # 1.tcp # 面向連線的可靠的流式傳輸 適合傳輸比較大的檔案, #對穩定性要求比較高的 # 擴充套件的說 為什麼 可靠? # 2.udp # 無連線的 快速 但不可靠 # 適合傳輸對效率要求比較高的短訊息 # 你瞭解4層交換機麼? # 瞭解,4層就是osi協議中的第4層,傳輸層 # 這一層封裝的是埠的資訊和tcp協議以及udp協議 # 所以4層交換機就是可以直接識別傳輸層協議和埠資訊的機器 # 能夠實現資訊輸出直接到埠 # 筆試題 # osi五層協議 # 應用層 http https ftp smtp # socket # 傳輸層 tcp/udp協議 埠 4層交換機\4層路由器# 網路層 ipv4/ipv6協議 ip 路由器\三層交換機 # 資料鏈路層 arp協議 mac地址 網絡卡\交換機 # 物理層 網線 # 以下哪些協議不屬於資料鏈路層? # 以下哪些硬體裝置是屬於網路層的? # socket # 什麼是socket? # 網路協議的大介面,幫助我們完成網路傳輸過程中的osi4層以及一下資訊的封裝 # tcp協議 : 要先建立連線 佔線 用socketserver解決 # udp協議: 不需要建立連線 且可同時和多個客戶端進行互動 # socketserver 實現了併發的socket tcp server# 黏包現象 : # 黏包現象怎麼產生的 # 首先,我們發出的資訊不是立即通過網路傳送到另一端 # 而是我們發到作業系統的快取中, # tcp協議首先流式傳輸無邊界,第二是可靠所以每一條資料都有回執 # 那麼為了節省網路上延遲的時間 # 連續傳送出的多個簡訊息就會黏在一起 # 由傳送端的快取傳送除去,所以接收到的就是黏在一起的資料了 # 傳送端傳送的訊息也不是直接傳送到對面的應用中 # 而是發到了對方作業系統的快取中 # 如果連續傳送的資料在對方的快取中沒有被及時取走 # 那麼也會發生黏包現象 # 如何解決黏包 # 自定義協議 # 先發送即將傳送資料的長度,然後再發送資料 # 先接收資料的長度,再根據接收的長度接收資料 # 用到了struct模組,來控制第一次傳送資料長度的這條資訊的長度 # ftp # 功能複雜 # 是一個相對完善的大功能
# 併發程式設計 6-7day # 作業系統基礎理論 初識程序 day1 # 程序 day2 day3 # 執行緒 day4 day5 # 協程 day6 + 拓展的知識點 # IO模型(待定) # 作業系統的基礎 # 作業系統的進化論 # 認識程序的概念 # 程序的狀態 # 什麼是並行什麼是併發 # 阻塞和非阻塞的概念 # 同步和非同步的概念 # 初識python中的程序
# 什麼是io操作 # i input 輸入 相對記憶體 進入記憶體 # read # recv # input 人腦子裡的內容直接通過鍵盤輸入到記憶體中 # load # o output 輸出 相對記憶體 從記憶體出去 # write # send # dump # 檔案操作就是io # 網路操作就是io # 檔案在硬碟上 程式在執行的時候 是在記憶體中儲存資料 # 如果檔案中的內容 -輸入的過程-> 記憶體中 # str -輸出的過程-> 寫到檔案中 # 網路操作 #send 輸出 #recv 輸入 # 多道作業系統 # 提高了cpu的利用率 # 第一次出現了一個概念 : 任務狀態的儲存 # 資料隔離的概念(由於同時在執行的多個程式之間的資料不能混為一談) # 單處理機系統中多道程式執行時的特點: # (1)多道:計算機記憶體中同時存放幾道相互獨立的程式; # (2)巨集觀上並行:同時進入系統的幾道程式都處於執行過程中,即它們先後開始了各自的執行,但都未執行完畢; # (3)微觀上序列:實際上,各道程式輪流地用CPU,並交替執行。 # 計算機 - 多道作業系統 # 研究生 : 5分鐘 並且沒有IO # 老教授 : 24h 並且沒有IO # 時間短的走 : 短作業優先演算法 # 分時作業系統 把時間分成片 # 實時作業系統 # 大型的任務 高併發 # 分散式系統 幫助你分發任務 拆解任務 # celery - 分散式 # 所有的程式 - 任務 # 所有對任務 - 程序 # 什麼是程序 ? 進行中的程式 # 程序 : # 是計算機中資源分配的最小單位 # 並且 程序與程序之間的資料是隔離的 # 程序的三狀態圖 # 就緒 阻塞 執行 # 同步 # 有幾件事情 先做一件,做完一件再做一件 # 非同步 # 有幾件事情 同時完成 # 阻塞 blocking # input # accept # recv # sleep # recvfrom # 非阻塞 所有不阻塞的程式 # import socket # sk = socket.socket() # sk.setblocking(False) # sk.bind(('127.0.0.1',9000)) # sk.listen() # while True: # try: # conn,addr = sk.accept() # break # except BlockingIOError: # print('沒人連我') # conn.recv # 四個詞不是一回事兒 # 同步和非同步是一對反義詞 # 阻塞和非阻塞是一對反義詞 # 同步阻塞 # 一件事兒一件事兒的做 # 中間還要被阻塞 # 同步非阻塞 : 費力不討好 # 一件事兒一件事兒的做 # 但是不阻塞 # 非同步阻塞 # 同時進行的 # 每一件事兒都會遇到阻塞事件 # 非同步非阻塞 # 幾個事情同時進行 # 每一件事都不阻塞
# import os,time # print(os.getpid(),os.getppid()) # get pid process id 獲取當前程序號 # get ppid parent process id 獲取當前父程序號 # time.sleep(20) # print(os.getpid()) # 子程序和父程序之間的關係 # pycharm啟動了py檔案 # py檔案就是子程序 # pycharm就是父程序
開啟子程序
# import multiprocessing # 這是個包 import os from multiprocessing import Process def son_process(): '''這個函式中的程式碼是在子程序中執行的''' print('執行我啦',os.getpid(),os.getppid()) if __name__ == '__main__': # son_process的外面是一個主程序 print('1 -->',os.getpid()) p = Process(target=son_process) p.start()