第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

暫停工作人員池

暫停工作人員池

Go
慕碼人2483693 2023-03-29 17:10:02
使用看起來(lái)比這更接近的工作池的 golang 實(shí)現(xiàn)我想暫停我的工作人員幾秒鐘,同時(shí)像交易過(guò)程一樣進(jìn)行數(shù)據(jù)庫(kù)同步。我不希望我的同步數(shù)據(jù)被另一個(gè)潛在的不受控制的工作人員更新。暫停工作的最佳方式是什么?關(guān)閉所有工人?在工人中使用 chan 以防止在暫停時(shí)找到工作?在處理工作之前使用全局標(biāo)志在每個(gè)工人中設(shè)置一個(gè)鎖?謝謝
查看完整描述

1 回答

?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

如果要實(shí)現(xiàn)數(shù)據(jù)庫(kù)同步或至少向二進(jìn)制文件發(fā)出信號(hào),您可能會(huì)RWMutex為此目的濫用 。


Read在 worker 進(jìn)行普通工作時(shí) 使用互斥鎖的一側(cè),并要求Write在執(zhí)行數(shù)據(jù)庫(kù)同步操作時(shí)保持該側(cè)。


至關(guān)重要的是,您必須確保Read僅在工作實(shí)際進(jìn)行時(shí)舉行。如果 worker 因等待更多工作而被阻塞,則不得持有讀鎖,因?yàn)檫@會(huì)使掛起的 writer 餓死。


如果您使用它,我強(qiáng)烈建議您在代碼中添加有關(guān)互斥體預(yù)期行為的文檔,因?yàn)檫@在讀寫(xiě)操作方面有些不標(biāo)準(zhǔn)。


如果您想要一個(gè)更通用的解決方案,您還可以包裝它并從派生接口導(dǎo)出不同的方法,并使用更好的名稱,如示例所示:


type WorkerGroupLocker struct {

    sync.RWMutex

}


func (lock *WorkerGroupLocker) LockWorker() {

    lock.RLock()

}


func (lock *WorkerGroupLocker) UnlockWorker() {

    lock.RUnlock()

}


func (lock *WorkerGroupLocker) LockBackgroundSync() {

    lock.Lock()

}


func (lock *WorkerGroupLocker) UnlockBackgroundSync() {

    lock.Unlock()

}

任何解決方案都必須解決這些一般問(wèn)題:

  • 要求所有工人停止工作。

  • 確保在允許數(shù)據(jù)庫(kù)工作開(kāi)始之前所有工作人員都已停止。

  • 向工人發(fā)出可以安全繼續(xù)工作的信號(hào)。

這樣做的替代方法包括以下方法,但在我看來(lái),以下所有方法都比使用互斥鎖復(fù)雜得多(因此容易出現(xiàn)錯(cuò)誤):

  • 關(guān)閉所有工人?

    要求工作人員在數(shù)據(jù)庫(kù)工作繼續(xù)進(jìn)行之前停止工作將實(shí)現(xiàn)所需的互斥。您需要一種向它們發(fā)出停止信號(hào)的方法,以及一種檢測(cè)何時(shí)真正完成的機(jī)制。

    在任何情況下都可能會(huì)爭(zhēng)辯說(shuō)您無(wú)論如何都需要它來(lái)確保您在程序終止時(shí)干凈地關(guān)閉。但是,程序終止是致命的,因此您不需要能夠按照此數(shù)據(jù)庫(kù)同步工作所需的方式干凈地啟動(dòng)和停止池。

  • 在工人中使用 chan 以防止在暫停時(shí)找到工作?

    這實(shí)施起來(lái)會(huì)很復(fù)雜,因?yàn)槟枰蛩泄と税l(fā)出停止工作的信號(hào),并確保他們?cè)陂_(kāi)始工作之前確實(shí)已經(jīng)停止主動(dòng)處理工作。還需要反向:重新開(kāi)始的信號(hào)。

涉及最少代碼的工作的最簡(jiǎn)單工具是互斥鎖。我建議使用那個(gè)。


查看完整回答
反對(duì) 回復(fù) 2023-03-29
  • 1 回答
  • 0 關(guān)注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)