GIL與異步回調

07.07自我總結python

一.GIL

1.概念

在CPython中,這個全局解釋器鎖,也稱爲GIL,是一個互斥鎖安全

2.帶來的問題

首先必須明確執行一個py文件,分爲三個步驟多線程

  1. 從硬盤加載Python解釋器到內存
  2. 從硬盤加載py文件到內存
  3. 解釋器解析py文件內容,交給CPU執行
  • 當進程中僅存在一條線程時,GIL鎖的存在沒有不會有任何影響
  • 當有多個進程的時候,多個進程會爭搶python解釋器,這時候爲了數據安全咱們會上鎖,從而讓兩個同時運行的程序從併發狀態變成串行影響了程序的速度

3.GIL與GC進程的關係

GC進程當內存佔用達到某個閾值時,GC會將其餘線程掛起,而後執行垃圾清理操做,垃圾清理也是一串代碼,也就須要一條線程來執行。併發

GIL的加鎖與解鎖時機異步

加鎖的時機:在調用解釋器時當即加鎖函數

解鎖時機:線程

  • 當前線程遇到了IO時釋放
  • 當前線程執行時間超過設定值時釋放

二.異步回調

同步隊列

指的是 提交任務後必須在原地等待 直到任務結束進程

異步內存

提交任務後不須要在原地等待 能夠繼續往下執行代碼

異步效率高於同步 ,異步任務將致使一個問題 就是 任務的發起方不知道任務什麼時候 處理完畢

解決方法:

  • 輪詢 重複的隔一段時間就問一次 效率低 沒法及時獲取結果 不推薦

  • 讓任務的執行方主動通知 (異步回調)能夠及時拿到任務的結果 推薦方式
    • 多進程與多線程中至關於jion函數來告訴咱們這個子有沒有運行結束
    • 在隊列中的jion來告訴咱們隊列有沒有被取完
    • 在線程池與進程池中至關於result()來告訴咱們有沒有結束,且result還會打印方法的返回值 ​
相關文章
相關標籤/搜索