日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:Python如何進行線程切換

線程切換

成都創(chuàng)新互聯(lián)公司是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的10多年時間我們累計服務(wù)了上千家以及全國政企客戶,如成都墻體彩繪等企業(yè)單位,完善的項目管理流程,嚴格把控項目進度與質(zhì)量監(jiān)控加上過硬的技術(shù)實力獲得客戶的一致稱揚。

條件對象能讓一個線程 A 停下來,等待其他線程 B ,線程 B 滿足了某個條件后通知(notify)線程 A 繼續(xù)運行。線程首先獲取一個條件變量鎖,如果條件不足,則該線程等待(wait)并釋放條件變量鎖,如果滿足就執(zhí)行線程,也可以通知其他狀態(tài)為 wait 的線程。其他處于 wait 狀態(tài)的線程接到通知后會重新判斷條件。

無論是多進程還是多線程,只要數(shù)量一多,效率肯定上不去,為什么呢?

我們打個比方,假設(shè)你不幸正在準備中考,每天晚上需要做語文、數(shù)學、英語、物理、化學這5科的作業(yè),每項作業(yè)耗時1小時。

如果你先花1小時做語文作業(yè),做完了,再花1小時做數(shù)學作業(yè),這樣,依次全部做完,一共花5小時,這種方式稱為單任務(wù)模型,或者批處理任務(wù)模型。

假設(shè)你打算切換到多任務(wù)模型,可以先做1分鐘語文,再切換到數(shù)學作業(yè),做1分鐘,再切換到英語,以此類推,只要切換速度足夠快,這種方式就和單核CPU執(zhí)行多任務(wù)是一樣的了,以幼兒園小朋友的眼光來看,你就正在同時寫5科作業(yè)。

但是,切換作業(yè)是有代價的,比如從語文切到數(shù)學,要先收拾桌子上的語文書本、鋼筆(這叫保存現(xiàn)場),然后,打開數(shù)學課本、找出圓規(guī)直尺(這叫準備新環(huán)境),才能開始做數(shù)學作業(yè)。操作系統(tǒng)在切換進程或者線程時也是一樣的,它需要先保存當前執(zhí)行的現(xiàn)場環(huán)境(CPU寄存器狀態(tài)、內(nèi)存頁等),然后,把新任務(wù)的執(zhí)行環(huán)境準備好(恢復(fù)上次的寄存器狀態(tài),切換內(nèi)存頁等),才能開始執(zhí)行。這個切換過程雖然很快,但是也需要耗費時間。如果有幾千個任務(wù)同時進行,操作系統(tǒng)可能就主要忙著切換任務(wù),根本沒有多少時間去執(zhí)行任務(wù)了,這種情況最常見的就是硬盤狂響,點窗口無反應(yīng),系統(tǒng)處于假死狀態(tài)。

所以,多任務(wù)一旦多到一個限度,就會消耗掉系統(tǒng)所有的資源,結(jié)果效率急劇下降,所有任務(wù)都做不好。

相關(guān)推薦:《python視頻教程》

下面為一個有趣的例子

import threading
class Boy(threading.Thread):
    def __init__(self, cond, name):
        super(Boy, self).__init__()
        self.cond = cond
        self.name = name
    def run(self):
        self.cond.acquire()
        print(self.name + ": 嫁給我吧???")
        self.cond.notify()  # 喚醒一個掛起的線程,讓hanmeimei表態(tài)
        self.cond.wait()  # 釋放內(nèi)部所占用的瑣,同時線程被掛起,直至接收到通知被喚醒或超時,等待hanmeimei回答
        print(self.name + ": 我單下跪,送上戒指!")
        self.cond.notify()
        self.cond.wait()
        print(self.name + ": Li太太,你的選擇太明治了。")
        self.cond.release()
class Girl(threading.Thread):
    def __init__(self, cond, name):
        super(Girl, self).__init__()
        self.cond = cond
        self.name = name
    def run(self):
        self.cond.acquire()
        self.cond.wait()  # 等待Lilei求婚
        print(self.name + ": 沒有情調(diào),不夠浪漫,不答應(yīng)")
        self.cond.notify()
        self.cond.wait()
        print(self.name + ": 好吧,答應(yīng)你了")
        self.cond.notify()
        self.cond.release()
cond = threading.Condition()
boy = Boy(cond, "LiLei")
girl = Girl(cond, "HanMeiMei")
girl.start()
boy.start()

運行結(jié)果如下:

LiLei: 嫁給我吧?。?HanMeiMei: 沒有情調(diào),不夠浪漫,不答應(yīng)
LiLei: 我單下跪,送上戒指!
HanMeiMei: 好吧,答應(yīng)你了
LiLei: Li太太,你的選擇太明治了。

   相關(guān)推薦:

Python中的線程和多線程是什么


標題名稱:創(chuàng)新互聯(lián)Python教程:Python如何進行線程切換
文章地址:http://www.5511xx.com/article/cdiehdc.html