AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

一文理解Python的全局解釋器鎖(GIL)

來源: 責編: 時間:2024-04-02 17:18:03 178觀看
導讀前言? 在Python中,全局解釋器鎖(Global Interpreter Lock,簡稱GIL)是一個重要的概念,它對Python解釋器的并發(fā)執(zhí)行模型產(chǎn)生了重大影響。本文將介紹GIL的概念、原理以及對Python多線程程序執(zhí)行效率的影響,并附帶詳細的代碼案

前言

? 在Python中,全局解釋器鎖(Global Interpreter Lock,簡稱GIL)是一個重要的概念,它對Python解釋器的并發(fā)執(zhí)行模型產(chǎn)生了重大影響。本文將介紹GIL的概念、原理以及對Python多線程程序執(zhí)行效率的影響,并附帶詳細的代碼案例進行說明。uJc28資訊網(wǎng)——每日最新資訊28at.com

什么是 GILuJc28資訊網(wǎng)——每日最新資訊28at.com

? GIL是Python解釋器中的一個互斥鎖,它確保在同一時刻只有一個線程能夠執(zhí)行Python字節(jié)碼。這意味著在多線程環(huán)境下,Python解釋器無法同時利用多個CPU核心進行并行執(zhí)行,因為只有一個線程能夠執(zhí)行Python字節(jié)碼指令。uJc28資訊網(wǎng)——每日最新資訊28at.com

GIL 的工作原理

? 當Python解釋器運行Python代碼時,它會獲取GIL,然后執(zhí)行相應(yīng)的字節(jié)碼指令。其他線程想要執(zhí)行Python字節(jié)碼時,必須先獲取GIL,但只有在當前線程釋放GIL后才能獲得。因此,只有一個線程能夠在任意時刻執(zhí)行Python字節(jié)碼,這就是GIL的工作原理。uJc28資訊網(wǎng)——每日最新資訊28at.com

GIL 的影響

多線程

? 盡管Python完全支持多線程編程, 但是解釋器的C語言實現(xiàn)部分在完全并行執(zhí)行時并不是線程安全的。 實際上,解釋器被一個全局解釋器鎖保護著,它確保任何時候都只有一個Python線程執(zhí)行。 GIL最大的問題就是Python的多線程程序并不能利用多核CPU的優(yōu)勢 (比如一個使用了多個線程的計算密集型程序只會在一個單CPU上面運行)。uJc28資訊網(wǎng)——每日最新資訊28at.com

? 有一點要強調(diào)的是GIL只會影響到那些嚴重依賴CPU的程序(比如計算型的)。 如果你的程序大部分只會涉及到I/O,比如網(wǎng)絡(luò)交互,那么使用多線程就很合適, 因為它們大部分時間都在等待。uJc28資訊網(wǎng)——每日最新資訊28at.com

? 對于依賴CPU的程序,你需要弄清楚執(zhí)行的計算的特點。 例如,優(yōu)化底層算法可能要比使用多線程運行快得多。 類似的,由于Python是解釋執(zhí)行的,如果你將那些性能瓶頸代碼移到一個C語言擴展模塊中, 速度也會提升的很快。如果你要操作數(shù)組,那么使用NumPy這樣的擴展會非常的高效。 最后,你還可以考慮下其他可選實現(xiàn)方案,比如PyPy,它通過一個JIT編譯器來優(yōu)化執(zhí)行效率。uJc28資訊網(wǎng)——每日最新資訊28at.com

多進程

? 在 Python 中,GIL(全局解釋器鎖)只影響到了多線程,而不會對多進程產(chǎn)生直接的影響。多進程是通過創(chuàng)建不同的 Python 解釋器來實現(xiàn)的,因此每個進程都有自己的獨立 GIL,它們之間互不影響。uJc28資訊網(wǎng)——每日最新資訊28at.com

如何解決 GIL 的缺點

示例代碼

? 代碼版本 Python 3.xuJc28資訊網(wǎng)——每日最新資訊28at.com

? 如我們?nèi)绾蝺?yōu)化下列代碼:uJc28資訊網(wǎng)——每日最新資訊28at.com

# Performs a large calculation (CPU bound)def some_work(args):    ...    return result# A thread that calls the above functiondef some_thread():    while True:        ...        r = some_work(args)    ...

使用多進程的方式

? 如果你完全工作于Python環(huán)境中,你可以使用 multiprocessing 模塊來創(chuàng)建一個進程池, 并像協(xié)同處理器一樣的使用它,每個進程有獨立的 GIL。uJc28資訊網(wǎng)——每日最新資訊28at.com

# Processing pool (see below for initiazation)pool = None# Performs a large calculation (CPU bound)def some_work(args):    ...    return result# A thread that calls the above functiondef some_thread():    while True:        ...        r = pool.apply(some_work, (args))        ...# Initiaze the poolif __name__ == '__main__':    import multiprocessing    pool = multiprocessing.Pool()

使用C擴展編程技術(shù)

? 主要思想是將計算密集型任務(wù)轉(zhuǎn)移給C,跟Python獨立,在工作的時候在C代碼中釋放GIL。 可以通過在C代碼中插入下面這樣的特殊宏來完成:uJc28資訊網(wǎng)——每日最新資訊28at.com

#include "Python.h"...PyObject *pyfunc(PyObject *self, PyObject *args) {   ...   Py_BEGIN_ALLOW_THREADS   // Threaded C code   ...   Py_END_ALLOW_THREADS   ...}

? 如果使用其他工具訪問C語言,比如對于Cython的ctypes庫,你不需要做任何事。 例如,ctypes在調(diào)用C時會自動釋放GIL。uJc28資訊網(wǎng)——每日最新資訊28at.com

參考

12.9 Python的全局鎖問題uJc28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-80834-0.html一文理解Python的全局解釋器鎖(GIL)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 并發(fā)協(xié)調(diào)神器CountDownLatch和CyclicBarrier

下一篇: C++ 八種常見類類型

標簽:
  • 熱門焦點
  • 小米降噪藍牙耳機Necklace分享:聽一首歌 讀懂一個故事

    在今天下午的小米Civi 2新品發(fā)布會上,小米還帶來了一款新的降噪藍牙耳機Necklace,我們也在發(fā)布結(jié)束的第一時間給大家?guī)磉@款耳機的簡單分享。現(xiàn)在大家能見到最多的藍牙耳機
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領(lǐng)先
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協(xié)調(diào)和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現(xiàn)手段有以下幾種方式:Object 類下
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現(xiàn)了一個流處理程序
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現(xiàn)百度,功能雖然實現(xiàn)了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 造車兩年股價跌六成,小米的估值邏輯變了嗎?

    如果從小米官宣造車后的首個交易日起持有小米集團的股票,那么截至2023年上半年最后一個交易日,投資者將浮虧59.16%,同區(qū)間的恒生科技指數(shù)跌幅為52.78%
  • 蘋果公司要求三星和LG Display生產(chǎn)「無邊框」OLED iPhone顯示屏

    據(jù) The Elec 報道,蘋果已要求其供應(yīng)商為未來的 iPhone 型號開發(fā)「無邊框」OLED 顯示面板。蘋果顯然已要求三星和 LG Display 開發(fā)新的 OLED 顯示面
  • 上海舉辦人工智能大會活動,建設(shè)人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術(shù)、新產(chǎn)品、新應(yīng)用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發(fā)展盛典人工
Top