欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

第十五章、Python多線程之信號(hào)量和GIL

系統(tǒng) 1783 0

目錄

  • 第十五章、Python多線程之信號(hào)量和GIL
    • 1. 信號(hào)量(Semaphore)
    • 2. GIL
      • 說(shuō)明:

第十五章、Python多線程之信號(hào)量和GIL

1. 信號(hào)量(Semaphore)

信號(hào)量用來(lái)控制線程并發(fā)數(shù)的,Semaphore管理一個(gè)內(nèi)置的計(jì)數(shù) 器,每當(dāng)調(diào)用acquire()時(shí)-1,調(diào)用release()時(shí)+1。計(jì)數(shù)器不能小于0,當(dāng)計(jì)數(shù)器為 0時(shí),acquire()將阻塞線程至同步鎖定狀態(tài),直到其他線程調(diào)用release()。其實(shí)就是控制最多幾個(gè)線程可以操作同享資源。

          
            import threading
import time

semaphore = threading.Semaphore(5)

def func():
    if semaphore.acquire():
        print (threading.currentThread().getName() + '獲取共享資源')
        time.sleep(2)
        semaphore.release()

for i in range(10)
  t1 = threading.Thread(target=func)
  t1.start()
--------------------------------------------------
Thread-1獲取共享資源
Thread-2獲取共享資源
Thread-3獲取共享資源
Thread-4獲取共享資源
Thread-5獲取共享資源

Thread-6獲取共享資源
Thread-8獲取共享資源
Thread-7獲取共享資源
Thread-9獲取共享資源
Thread-10獲取共享資源
          
        

上面一個(gè)簡(jiǎn)單的例子就是創(chuàng)建10個(gè)線程,讓每次只讓5個(gè)線程去執(zhí)行func函數(shù)。

結(jié)果:5個(gè)線程一批一批的執(zhí)行打印,中間停格2s

2. GIL

含義:全局解釋器鎖 。

作用:無(wú)論你啟多少個(gè)線程,你有多少個(gè)cpu, Python在執(zhí)行的時(shí)候只會(huì)的在同一時(shí)刻只允許一個(gè)線程(線程之間有競(jìng)爭(zhēng))拿到GIL在一個(gè)cpu上運(yùn)行,當(dāng)線程遇到IO等待或到達(dá)者輪詢時(shí)間的時(shí)候,cpu會(huì)做切換,把cpu的時(shí)間片讓給其他線程執(zhí)行,cpu切換需要消耗時(shí)間和資源,所以計(jì)算密集型的功能(比如加減乘除)不適合多線程,因?yàn)閏pu線程切換太多,IO密集型比較適合多線程。

任務(wù):

  • IO密集型(各個(gè)線程都會(huì)都各種的等待,如果有等待,線程切換是比較適合的),也可以采用可以用多進(jìn)程+協(xié)程

  • 計(jì)算密集型(線程在計(jì)算時(shí)沒有等待,這時(shí)候去切換,就是無(wú)用的切換),python不太適合開發(fā)這類功能

    ? 我們前面舉得例子里面模擬了sleep操作,其實(shí)就是相當(dāng)于遇到IO,這種場(chǎng)景用多線程是可以增加性能的,但是如果我們用多線程來(lái)計(jì)算數(shù)據(jù)的計(jì)算,性能反而會(huì)降低。

證明一下:

          
            from threading import Thread
from multiprocessing import Process
import time

#計(jì)算密集型
def work1():
    res=0
    for i in range(100000000): #1+8個(gè)0
        res*=i

if __name__ == '__main__':
    t_list = []
    start = time.time()
    for i in range(4):
        # t = Thread(target=work1)
        t = Process(target=work1)
        t_list.append(t)
        t.start()
    for t in t_list:
        t.join()
    end = time.time()
    # print('多線程',end-start) # 多線程 15.413789510726929
    print('多進(jìn)程',end-start) # 多進(jìn)程 4.711405515670776
          
        
          
            from threading import Thread
from multiprocessing import Process
import time
# io密集型
def work1():
    x = 1+1
    time.sleep(5)


if __name__ == '__main__':
    t_list = []
    start = time.time()
    for i in range(4):
        t = Thread(target=work1)
        # t = Process(target=work1)
        t_list.append(t)
        t.start()
    for t in t_list:
        t.join()
    end = time.time()
    print('多線程',end-start) #  多線程 5.002625942230225
    # print('多進(jìn)程',end-start) # 多進(jìn)程 5.660863399505615
          
        

說(shuō)明:

          
            在Cpython解釋器中有一把GIL鎖(全局解釋器鎖),GIl鎖本質(zhì)是一把互斥鎖。
導(dǎo)致了同一個(gè)進(jìn)程下,同一時(shí)間只能運(yùn)行一個(gè)線程,無(wú)法利用多核優(yōu)勢(shì).
同一個(gè)進(jìn)程下多個(gè)線程只能實(shí)現(xiàn)并發(fā)不能實(shí)現(xiàn)并行.
為什么要有GIL?
因?yàn)閏python自帶的垃圾回收機(jī)制不是線程安全的,所以要有GIL鎖.
導(dǎo)致了同一個(gè)進(jìn)程下,同一時(shí)間只能運(yùn)行一個(gè)線程,無(wú)法利用多核優(yōu)勢(shì).
分析:我們有四個(gè)任務(wù)需要處理,處理方式肯定是要玩出并發(fā)的效果,解決方案可以是:
方案一:開啟四個(gè)進(jìn)程
方案二:一個(gè)進(jìn)程下,開啟四個(gè)線程
計(jì)算密集型 推薦使用多進(jìn)程
 每個(gè)都要計(jì)算10s
 多線程
 在同一時(shí)刻只有一個(gè)線程會(huì)被執(zhí)行,也就意味著每個(gè)10s都不能省,分開每個(gè)都要計(jì)算10s,共40.ns
 多進(jìn)程
 可以并行的執(zhí)行多個(gè)線程,10s+開啟進(jìn)程的時(shí)間
          
        

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲区色 | 成熟自由日本语热亚洲人 | 精品av| 一级毛片视频免费 | 性色欧美 | 任你操免费视频 | 五月天激激婷婷大综合蜜芽 | 国产成人黄网址在线视频 | 国产亚洲精品精品国产亚洲综合 | 国产午夜精品理论片影院 | 午夜大片免费男女爽爽影院久久 | 国产精品高清在线观看 | 欧美八区| 欧美精品一区二区三区免费播放 | 欧美亚洲在线观看 | 精品一区二区三区在线视频 | 一区二区成人国产精品 | 看黄网站在线看 | 免费午夜视频 | 欧洲成人午夜免费大片 | 波多野结衣全部系列在线观看 | 国产成人精品福利网站在线观看 | 国产精品视频999 | 特级毛片免费 | 久久久蜜桃 | 一区二区三区日韩精品 | 欧美日韩福利视频 | 国产毛片久久久久久国产毛片 | 67194国产精品免费观看 | 男女视频免费在线观看 | 日本免费观看网站 | 免费国产免费福利视频 | 久久精品视频一区二区 | 久久久不卡网国产精品一区 | 欧洲精品久久久 | 野花国产精品入口 | 色综合五月色婷婷开心 | 成人精品视频一区二区三区尤物 | 黄色电影在线免费观看 | 日韩免费一区二区 | 色综合天天综合网国产成人网 |