程序 併發 IO操作 阻塞 同步 非同步

2022-05-25 13:18:10 字數 4411 閱讀 6448

什麼是程序:

乙個執行中的程式就是乙個程序

什麼是同步:

程式順序執行,多個任務之間序列執行

什麼是非同步:

多個任務同時 執行

什麼是阻塞:

input  

sleep

***recv

***recvfrom 

***accept

程式由於不符合某個條件或者等待某個天劍滿足在某乙個地方進入等待狀態

什麼是非阻塞:

sk.setblocking(false)就讓這個socket模型buzuse了

並行: 

微觀上是指兩者同時執行,比如賽跑,兩個人都在不停的往前跑     

同一時刻不知有乙個cpu在工作

併發:巨集觀上實在同時執行的

微觀上是乙個乙個順序執行

同一時刻只有乙個cpu在工作

io操作:

input 輸入到記憶體 read load  recv accept recvfrom input

output 從記憶體輸出  write  dump send  connect sendto print

multiprocessing模型

import time

from multi'processing import process

#通過併發實乙個有併發效果的socket server

開啟了乙個子程序就已經實現了併發:父程序(主程序)

def son_process():

print("son start")

time.sleep(1)

print("son end")

if __name __ =="__main__":

p = process(target = son _process)#執行子程序要執行的**

p.start()#通知作業系統開啟乙個子程序

for i in range(10):

print("主程序")

#2.開啟多個子程序(1)

def son_process():

print("son start")

time.sleep(1)

print("son end")

if __name __ =="__main__":

p1 = process(target = son _process)#執行子程序要執行的**

p1.start()#通知作業系統開啟乙個子程序

p2 = process(target = son _process)#執行子程序要執行的**

p2.start()#通知作業系統開啟乙個子程序

#開啟多個子程序(2)

def son_process():

print("son start")

time.sleep(1)

print("son end")

if __name __ =="__main__":

for i  inrange(3):

p  = process(target = son _process)#執行子程序要執行的**

p.start()#通知作業系統開啟乙個子程序

3.可以給子程序傳引數麼

def son_process():

print("son start")

time.sleep(1)

print("son end")

if __name __ =="__main__":

for i  inrange(3):

p  = process(target = son _process,args = (i,))#執行子程序要執行的**

p.start()#通知作業系統 start並不意味著子程序已經開始了

能不能用多程序實現乙個併發的socket  server

#4.主程序可不可以直接結束乙個子程序

def son_process():

print("son start",1)

time.sleep(1)

print("son end",1)

if __name __ =="__main__":

for i  inrange(10):

p  = process(target = son _process,args = (i,))#執行子程序要執行的**

p.start()

print("主程序的**執行完畢")

主程序等待子程序結束之後才結束

#5.殭屍程序

def son_process():

while true:

print("son start",1)

time.sleep(1)

print("son end",1)

if __name __ =="__main__":

p  = process(target = son _process,args = (1,))#執行子程序要執行的**

p.start()

print("主程序的**執行完畢")

print(p.is_alive())#子程序還活著

pterminate()#結束乙個子程序,非同步的

print(p.is_alive())#子程序還在活著

time.sleep(0.1)

print(p.is_alive())

#5.程序之間資料隔離的概念

n =100

def sub_n():

global n#子程序對於主程序中的全域性變數的謝蓋是不該不生效的

n -=1

print("子程序n:",n)

if __name__ == "__main__":

p = process(target = sub_n)

p.start()

p.join()#阻塞 直達子程序p結束 

peint("主程序n:",n) 

#6.開啟10個繼承執行subn

#主程序裡的print("主程序n:",n)這句話在是個子程序執行完畢之後才執行

n =[100]

imort random

def sub_n():

global n#子程序對於主程序中的全域性變數的謝蓋是不該不生效的

time.sleep(random.random())

print("子程序n:",n)

if __name__ == "__main__":

p_lst =

for i in range(10):

p = process(target = sub_n)#

p.start()

for p in p_lst:p.jion()#阻塞只有乙個條件能夠讓我繼續執行

print("主程序n:",n) 

###守護程序

什麼是守護程序:

監控系統

每隔1分鐘主動匯報當前程式的狀態

import time

from  multiprocessing import process

def alive():

while true:

print("連線監控程式,並且傳送報活資訊"

time.sleep(0.6)

def func():

"主程序中的核心**"

while true:

print("選擇的專案")

time.sleep(1)

n= input("請選擇你要做的操作")

int(n)

print("根據使用者的選擇做事")

if __name__ = "__main__":

p =process(target=alive).start()

p.daemon = true#設定子程序為守護程序,守護程序會隨著主程序**的結束而結束

p.start()

p =process(target=func)

p.start()

p.join()#在主程序中等待

設定子程序為守護程序,守護程序會隨著主程序**的結束而結束

由於主程序要負責給所有的子程序收屍,所以主程序必須是 

主程序會等待所有的子程序結束之後才結束

守護程序在主程序的**結束之後就結束 

process類:

開啟乙個子程序

能不能給子程序傳遞乙個引數

能不能有乙個返回值

主程序控制子程序的同步

守護程序

另一種開啟子程序的方式

lock 鎖

保證資料的安全性

s

同步IO 非同步IO 阻塞IO 非阻塞IO

同步io 非同步io 阻塞io 非阻塞io,這幾個詞常見於各種各樣的與網路相關的文章之中,往往不同上下文中它們的意思是不一樣的,以致於我在很長一段時間對此感到困惑,所以想寫一篇文章整理一下。posix 可移植作業系統介面 把同步io操作定義為導致程序阻塞直到io完成的操作,反之則是非同步io按pos...

IO 同步,非同步,阻塞,非阻塞

參考文章 好文推薦 唉最近真是高產似母豬,剛進新公司工作量暫時不飽和,只能每天學學學學學學查漏補缺啦,學習使我快樂哈哈哈哈哈哈哈哈 標題裡的詞彙相信都經常看到,但是能說清楚的估計20個人裡面能有1個就不錯了,網上的資料也是五花八門,大部分描述差不多,很多時候估計作者本身也是似懂非懂,我也看了很多文章...

同步 非同步 阻塞 非阻塞 I O

一 同步 非同步 首先要是多個事物,只有乙個事物,是不存在同步或非同步的。同步 指協同步調。即,多個事物不能同時進行,必須乙個乙個的來,上乙個事物結束後,下乙個事物才開始。那當乙個事物正在進行時,其他事物在幹嘛呢?嚴格來講並沒有要求,但一般都處於 等待 狀態,因為後面事物的正常進行都需要依賴前面事物...