多工知識點總結

2021-10-12 17:25:12 字數 1860 閱讀 3884

​ 執行緒是作業系統排程的單位,在python中使用threading類中的thread來建立函式,並且利用target指定執行緒需要執行的函式名稱,也可以通過args傳入元組引數放入其執行緒中。

​ 執行緒之間共享全域性變數,因此無需其餘的東西來進行通訊,但也因此會產生資源占用等情況,此時我們需要引入互斥鎖,即當乙個執行緒用到全域性變數時,會將該值鎖住,等待該執行緒執行完畢之後再解開。其餘執行緒也是同樣的方式利用互斥鎖來保護全域性變數。在使用互斥鎖的同時還需要注意避免出現死鎖的情況。死鎖即a等待b的資源而b同樣在等待a的資源。

​ 程序是資源分配的單位,在python中使用multiprocessing類的process來建立程序,其方法與thread方法類似,利用target指定程序需要執行的函式名稱,也可以通過args傳入元素引數放入程序中。並且程序在作業系統中有唯一的乙個pid號繫結,因此process有乙個多餘的pid函式來獲取該程序的程序號。同時也可以利用os模組的getpid來獲取當前程序的程序號。

​ 程序之間不共享全域性變數,因此我們需要乙個queue(佇列)來進行程序之間的通訊,該queue由multiprocessing的queue提供,由a程序往佇列中傳值,這個值可以由b程序獲取。這樣就可以讓程序之間相互通訊。

​ 在說協程之前需要先知道生成器,生成器又是迭代器的乙個特殊,那就先來說說迭代器,在python中,可以利用for…in…語法依次獲取值的物件我們成為可迭代物件。我們知道for…in…語法是從該物件的第乙個值開始取值直到最後乙個,那麼我們就需要引入乙個」人「來記住當前以及取到第幾個值了。我們把這個記東西的」人「稱為迭代器。說直白一點:在python中,乙個類它實現了__iter__方法就是可迭代物件,當呼叫這個函式的時候,返回值就是乙個迭代器。迭代器在python中就是同時實現了__iter____next__方法。

​ 所以,可迭代物件的本質就是可以向我們提供乙個這樣的中間「人」即迭代器幫助我們對其進行迭代遍歷使用。迭代器是用來幫助我們記錄每次迭代訪問到的位置,當我們對迭代器使用**next()**函式的時候,迭代器會向我們返回它所記錄位置的下乙個位置的資料。

​ 那麼什麼是生成器呢?生成器很容易判斷,如果乙個函式中的return函式被變成了yield。此時該函式就公升級變成了生成器,為什麼說生成器也是迭代器的一種呢?因為當函式執行到yield的時候,就被阻塞掛起了,該函式返回乙個yield所給的值。當函式呼叫next()方法時,便會繼續執行yield的下面**,如果是乙個迴圈,那就再次進入迴圈再來一遍上面的過程。這裡還需要注意一點就時當乙個物件被yield過後,就相當於刪除了值,如果第一遍用yield遍歷所有值之後,第二遍將會得到乙個空的物件。

​ 在說回協程,協程是python個中另外一種實現多工的方式,只不過比執行緒更小占用更小執行單元(理解為需要的資源)。 為啥說它是乙個執行單元,因為它自帶cpu上下文。這樣只要在合適的時機, 我們可以把乙個協程 切換到另乙個協程。 只要這個過程中儲存或恢復 cpu上下文那麼程式還是可以執行的。這樣理解:在乙個執行緒中的某個函式,可以在任何地方儲存當前函式的一些臨時變數等資訊,然後切換到另外乙個函式中執行,注意不是通過呼叫函式的方式做到的,並且切換的次數以及什麼時候再切換到原來的函式都由開發者自己確定。

​ 我們一般使用gevent來建立協程,特別需要注意一點是,gevent的耗時操作需要使用他自己帶的sleep函式,如果使用time的或者io阻塞的耗時操作,這會被忽視掉,使得整個還是按照線性在執行,那麼我們可以引入乙個monkey,它的monkey.patch_all()函式可以將整個**放入乙個空間,然後搜尋所有的耗時函式,將他們自動轉化為gevent的耗時函式。

知識點總結

1,迴圈中的中斷 continue 跳出此次迴圈,繼續for迴圈 break 跳出當前for迴圈 return 跳出當前方法 2,字串的操作 componentseparatedbystring stringbyreplacingoccurencesofstring withstring iskin...

知識點總結

oncreate onstrat onresume onpause onstop onrestart ondestroy standard 啟動activity都會產生乙個新的activity 預設模式 singletop 啟動activity允許多個,但不允許重疊 singletask 只允許有乙...

知識點總結

function go go 呼叫 go為變數名 setinterval go,1000 1000ms clearinterval 關閉定時器 function abc a,b 2,3 5undefined 未定義 null 空 nan 非數值 string 字串 var a 123 數字型別 va...