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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

針對 Google Photos API 的競爭條件

針對 Google Photos API 的競爭條件

Go
眼眸繁星 2022-06-21 16:30:18
我正在開發(fā)此 CLI以將圖像上傳到 Google 照片。CLI 創(chuàng)建多個 go 例程來并行上傳文件1。上傳后,相同的例程會將其添加到Album. 如果這些相冊在2之前不存在,則創(chuàng)建這些相冊。由于并發(fā)性和Google Photos API 允許創(chuàng)建兩個Albums具有相同名稱的事實,我想要避免重復的專輯名稱。GetOrCreateAlbumByName() 3并不能確保Album是唯一的。它基本上詢問是否存在同名的專輯,如果不存在,它將創(chuàng)建一個新專輯。但是可以并行調(diào)用此函數(shù),因此Album可以創(chuàng)建兩個具有相同名稱的函數(shù)。除了實現(xiàn)互斥鎖之外,我還在觀察重復項。你會建議如何處理?創(chuàng)建一個處理專輯創(chuàng)建的 Worker(如微服務(wù))。在創(chuàng)建相冊之前,每個 goroutine 都將被阻止。它將刪除Album創(chuàng)建部分的并發(fā)性。維護一個相冊緩存并使用它來檢查相冊是否已經(jīng)創(chuàng)建。在這種情況下,競爭條件也可能發(fā)生,但概率較小。1 和 2 一起使用。其他,請注明。我對 1、2 和 3 感到擔憂……這就是為什么我想知道您將如何處理。提前致謝
查看完整描述

1 回答

?
UYOU

TA貢獻1878條經(jīng)驗 獲得超4個贊

您用于Client.GetOrCreateAlbumByName()獲取或創(chuàng)建相冊。此方法對于并發(fā)使用是安全的,它在內(nèi)部使用互斥鎖來序列化調(diào)用,從而確保不會創(chuàng)建重復項。


但是,您在這里創(chuàng)建和使用多個客戶端,這意味著對所有客戶端的并發(fā)調(diào)用不會被序列化,只會對單個客戶端的并發(fā)調(diào)用。


所以解決方案要么使用單個客戶端,然后所有調(diào)用都將被序列化,或者如果這不可能,您必須序列化對所有客戶端的調(diào)用,例如使用單個互斥鎖或其他方式。


如何使用互斥鎖序列化對所有客戶端的調(diào)用的示例:


var mu sync.Mutex


func GetOrCreateAlbumByName(c *gphotos.Client, name string) (*photoslibrary.Album, error) {

    mu.Lock()

    defer mu.Unlock()

    return c.GetOrCreateAlbumByName(name)

}

無論您在哪里使用client.GetOrCreateAlbumByName(name),都將其替換為調(diào)用:


GetOrCreateAlbumByName(client, name)


查看完整回答
反對 回復 2022-06-21
  • 1 回答
  • 0 關(guān)注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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