Python高階知識(2)

2021-10-09 07:49:12 字數 2301 閱讀 7011

a.程序能實現多工,但是資源占用太多,是資源分配的單位,只有在計算密集型程式用多程序,計算密集型就是例如乙個程式要計算1~1億之間的每個數的立方和。

b.執行緒是作業系統的排程的單位,占用資源很少,只有在io密集型程式下使用多執行緒,io密集型就是相當於乙個程式是tcp伺服器,大部分時間都是在等待客戶端的鏈結與資料的手法,乙個程序中可以擁有n個執行緒,執行緒之間共享一些資料項全域性變數。

c.協程最大的特點就是由開發者決定的,協**正的意義是如果在乙個任務執行的過程中,遇到了耗時操作,而不是等待耗時操作,而是去執行其他的任務,當這個耗時操作執行完畢之後,在切換回來,這樣就提高了程式的效率。

cpu上下文linux是乙個多工的作業系統,它支援遠大於cpu數量的任務同時執行,當然,這些任務實際上並不是真正的在同時執行,而是應為系統在很短的時間內,將cpu輪流分配給他們,造成很多任務同時執行的錯覺。在每個任務執行前,cpu都需要知道任務從**載入,又是從**開始執行,也就是說,需要系統事先幫他設定好cpu暫存器和程式計數器(program counter,pc)cpu暫存器,是cpu內建的容量小、但速度極快的記憶體。程式計數器,則是用來儲存cpu正在執行的指令的位置,或者即將執行的下一條指令的位置。他們都是cpu在執行任何任務前,必須依賴的環境,因此也被叫做cpu上下文。知道了什麼是cpu上下文,也就很容易理解cpu上下文切換。cpu上下文切換,就是先把前乙個任務的cpu上下文(也就是cpu暫存器和程式計數器)儲存起來,然後載入新任務的上下文,到這些暫存器和程式計數器,最後再跳轉到程式計數器所指的新位置,執行新任務。

from gevent import monkey

import gevent

import random

import time

# 有耗時操作時需要

monkey.patch_all(

)# 將程式中用到的耗時操作的**,換為gevent中自己實現的模組

defcoroutine_work

(coroutine_name)

:for i in

range(10

):# print(coroutine_name, i)

print

("--------1--------"

) time.sleep(random.random())

defcoroutine_work2

(coroutine_name)

:for i in

range(10

):# print(coroutine_name, i)

print

("--------2--------"

) time.sleep(random.random())

# 方式1

# # 1. 建立

# g1 = gevent.spawn(coroutine_work, "work1")

# g2 = gevent.spawn(coroutine_work2, "work2")

# # 2. 等待協程結束

# g1.join()

# g2.join()

# 方式2:建立&等待合併操作

gevent.joinall(

[ gevent.spawn(coroutine_work,

"work1"),

gevent.spawn(coroutine_work2,

"work2")]

)

1.程序是資源分配的單位

2.執行緒是作業系統排程的單位

3.程序切換需要的資源很最大,效率很低

4.執行緒切換需要的資源一般,效率一般(當然了在不考慮gil的情況下)

5.協程切換任務資源很小,效率高

6.多程序、多執行緒根據cpu核數不一樣可能是並行的,但是協程是在乙個執行緒中 所以是併發

1.什麼是gil?

gil:在乙個程序中,任何乙個執行緒想要執行,必須得到這個鎖才能執行,這個鎖稱為gil鎖。

2.鎖是什麼?有什麼作用?

鎖是一種保護資源的一種方式,在很多地方都用,像資料庫。

3.既然有了全域性直譯器鎖為什麼還有要互斥鎖?

gil僅僅保證了同一時刻有乙個執行緒在執行,而互斥鎖保證的是這個事情從頭到尾做完。

python高階知識總結

支援函式式程式設計,函式式程式設計的特點 偏向於計算,而非指令,把計算視為函式而非指令 不需要變數,無 測試簡單 支援高階函式,簡潔 python函式式程式設計的特點 不是純函式式程式設計,可以有變數 支援高階函式,允許函式作為變數傳入 允許閉包,有了閉包就有返回函式 有限度的支援匿名函式 變數可以...

python 高階知識點 Python 高階知識點

filter 函式 filter 函式用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。filter function,iterable 引數 function 判斷函式,返回布林值。iterable 可迭代物件。a 12a,234 dgb b list filter str.i...

Python 高階函式(2)

sorted 函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序。key指定的函式將作用於list的每乙個元素上,並根據key函式返回的結果進行排序。假設我們用一組tuple表示學生名字和成績 l bob 75 adam 92 bart 66 lisa 88 請用sorted 對上述...