1. 程式人生 > >day38 Pyhton 併發程式設計

day38 Pyhton 併發程式設計

# 網路程式設計
# 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()