day10程序 非同步IO

2022-09-20 03:00:12 字數 1437 閱讀 5897

執行緒 記憶體共享

執行緒同時修改同乙份資料時必須加鎖,mutex互斥鎖

遞迴鎖def fun(n):

code

t = threading.thread(target=run,args=(n,))

t.start()

t.join()#必須要等待執行緒執行完才能往下執行

守護執行緒t.setdaemon()必須在start()上定義,主線程不必等待守護執行緒的結束

io操作不占用cpu ,計算操作占用cpu

python多執行緒其實是單核操作:不適合cpu密集操作型的任務,適合io操作密集型的任務。

程序之間互訪資料multiprocessing.process(target = f,args = (q,):

通過multiprocessing.queue()共享:其實是在子程序中轉殖乙份queue,然後通過pickle序列化實現兩個queue之間的通訊,該過程直接通過python底層實現,無需使用者操作。

管道:parent_conn, child_conn = multiprocessing.pipe(); p = multiprocessing.process(target=f,args=child_conn,)) 通過parent_conn, child_conn的send和recv來傳遞資料。

以上兩個都是傳遞資料。

通過manager可以實現真正的資料共享。

程序鎖程序池:multiprocessing.pool()。可以定義程序池可執行程序數量。最後pool.close(); pool.join().

協程:微執行緒,是一種使用者態的輕量級執行緒,cpu根本不知道。協程擁有自己的暫存器上下文和棧。。。

協程的好處:1、無需執行緒上下文切換的開銷;2、無需原子操作鎖定及同步的開銷;方便切換控制流,簡化程式設計模型;高併發、高擴充套件、低成本。 缺點:無法利用多核資源,

需要匯入gevent包,使用import greenlet:gr1 = greenlet(test1)

通常,我們寫伺服器處理模型的程式時,有以下幾種模型:

(1)每收到乙個請求,建立乙個新的程序,來處理該請求;

(2)每收到乙個請求,建立乙個新的執行緒,來處理該請求;

(3)每收到乙個請求,放入乙個事件列表,讓主程序通過非阻塞i/o方式來處理請求

上面的幾種方式,各有千秋,

第(1)中方法,由於建立新的程序的開銷比較大,所以,會導致伺服器效能比較差,但實現比較簡單。

第(2)種方式,由於要涉及到執行緒的同步,有可能會面臨死鎖等問題。

第(3)種方式,在寫應用程式**時,邏輯比前面兩種都複雜。

綜合考慮各方面因素,一般普遍認為第(3)種方式是大多數網路伺服器採用的方式

使用者空間和核心空間

現在作業系統都是採用虛擬儲存器,那麼對於32位作業系統而言,它的定址空間為4g。作業系統的核心是核心,獨立於記憶體的應用程式,可以訪問受保護的記憶體空間,也有訪問底層硬體裝置的所有許可權。

閉關日記 Day10

小雨。我想想怎麼寫,先挖坑。d 確認4.1 考科目三,估計過幾天要開始練車了。晚上去工作室敲 剛好看到他們在筆試,明天就是我筆試了,祝一切順利 專案f的電鋸聲識別,開始用比較勉強的方式實現,算是折衷吧,迫於時間,暫時如此,精準的識別想來是我目前做不出來的,如果畢設做這個,倒是也可以好好研究一些聲音方...

Day 10 遞迴函式

include long func int func函式呼叫 int main long func int n 呼叫形參 已知斐波那契函式1,2,3,5,8 n 1,n得到分段函式n 1時為1 n 2時為2 n 2時為 n 1 n 2 同理若求8的n次方時分段函式n 0時為1 n 1時為8 8 n ...

暑期訓練 day10

暑期訓練 day10 趙景樂今天主要學習了書上的鍊錶與鄰接表的知識,發現我之前的理解好像錯了,不但麻煩還不好用,今天看了書才發現原來這樣更好。不足的地方是今天沒看明白多少內容,因為一開始書上的模板就是以名字作為變數,對照起來不容易看明白,估計明天也得花時間在這上面了。今天的訓練賽ab題都比較簡單,但...