日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

Go并發可視化解釋 – select語句

來源: 責編: 時間:2023-09-18 21:41:14 329觀看
導讀上周,我發布了一篇關于如何直觀解釋Golang中通道(Channel)的文章。如果你對通道仍然感到困惑,請先查看那篇文章:《Go并發可視化解釋 — Channel》。作為一個快速復習:Partier、Candier和Stringer經營著一家咖啡店。Partier

上周,我發布了一篇關于如何直觀解釋Golang中通道(Channel)的文章。如果你對通道仍然感到困惑,請先查看那篇文章:《Go并發可視化解釋 — Channel》。ohD28資訊網——每日最新資訊28at.com

ohD28資訊網——每日最新資訊28at.com

作為一個快速復習:Partier、Candier和Stringer經營著一家咖啡店。Partier負責接受顧客的訂單,然后將這些訂單傳遞給廚房,Candier和Stringer制作咖啡。ohD28資訊網——每日最新資訊28at.com

ohD28資訊網——每日最新資訊28at.com

Gophers' Cafe(Gopher咖啡館)ohD28資訊網——每日最新資訊28at.com

在本文中,我將直觀解釋select語句,這是在Go應用程序中處理并發的另一個強大工具。Gophers和他們的虛構咖啡館仍然是我的伙伴,但這次,讓我們聚焦在Partier和點單部分。ohD28資訊網——每日最新資訊28at.com

情景

Gopher的Cafe意識到越來越多的顧客希望通過外賣應用程序在線訂購咖啡。因此,除了店內點餐外,他們還選擇了一個外賣應用程序。Partier會監視來自兩個通道的訂單,并通過另一個名為queue的通道將這些訂單轉發給Candier和Stringer。ohD28資訊網——每日最新資訊28at.com

select {case order := <-appOrders:    queue <- ordercase order := <-inShopOrders:    queue <- order}

當這兩個通道中的任何一個有訂單時,Partier會獲取訂單并將其轉發到queue通道。ohD28資訊網——每日最新資訊28at.com

ohD28資訊網——每日最新資訊28at.com

ohD28資訊網——每日最新資訊28at.com

如果這兩個通道都有訂單,將會選擇其中一個。在實際的咖啡店中,來自inShopOrders的訂單可能會被優先處理。但是,在Go應用程序中,我們無法保證哪個訂單會被選擇。還要注意,select語句的執行只會選擇一個訂單,Partier不會一次選擇兩個訂單。但是,在許多應用程序中,select語句通常嵌套在for循環中,以便在前一個迭代中剩下的訂單有機會在下一個迭代中被選擇。ohD28資訊網——每日最新資訊28at.com

select {case order := <-appOrders:    queue <- ordercase order := <-inShopOrders:    queue <- order}

但是,如果這兩個通道都有訂單,它們將再次進行公平競爭。ohD28資訊網——每日最新資訊28at.com

ohD28資訊網——每日最新資訊28at.com

默認情況(Default)

在非高峰時段,訂單不多,Partier花費大量時間在等待上。他認為,他可以通過做其他事情來更有效地利用時間,例如清理桌子。這可以通過default來實現:ohD28資訊網——每日最新資訊28at.com

for {    select {    case order := <-appOrders:        log.Println("There is an order coming from appOrders channel")        queue <- order    case order := <-inShopOrders:        log.Println("There is an order coming from inShopOrders channel")        queue <- order    default:        log.Println("There is no order on both channels, I will do cleaning instead")        doCleaning()    }}

time.After()

time.After(duration)通常與select一起使用,以防止永久等待。與default不同,time.After(duration)會創建一個普通的<-chan Time,等待duration時間的流逝,然后將當前時間發送到返回的通道上。這個通道在select語句中與其他通道平等對待。正如你所看到的,select語句中的通道可以是不同類型的。ohD28資訊網——每日最新資訊28at.com

shouldClose := falsecloseHourCh := time.After(8 * time.Hour)for !shouldClose {    select {    case order := <-appOrders:        log.Println("There is an order coming from appOrders channel")        queue <- order    case order := <-inShopOrders:        log.Println("There is an order coming from inShopOrders channel")        queue <- order    case now := <-closeHourCh:        log.Printf("It is %v now, the shop is closing/n", now)        shouldClose = true    default:        log.Println("There is no order on both channels, I will go cleaning instead")        doCleaning()    }}log.Println("Shop is closed, I'm going home now. Bye!")

當處理遠程API調用時,這種技術非常常見,因為我們無法保證遠程服務器何時返回或是否返回。借助于context,通常不需要這樣做。ohD28資訊網——每日最新資訊28at.com

responseChannel := make(chan interface{})timer := time.NewTimer(timeout)select {case resp := <-

本文鏈接:http://www.www897cc.com/showinfo-26-10449-0.htmlGo并發可視化解釋 – select語句

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

上一篇: SpringBoot攔截器和動態代理有什么區別?

下一篇: SpringBoot攔截器和動態代理有什么區別?

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 7月安卓手機好評榜:三星S23Ultra好評率第一

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年7月1日至7月31日,僅限國內市場。第一名:三星Galaxy S23 Ultra好評率:95.71%在即將迎來新
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的&ldquo;新電商三兄弟&rdquo;成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 信通院:小米、華為等11家應用商店基本完成APP簽名及驗簽工作

    中國信通院表示,目前,小米、華為、OPPO、vivo、360手機助手、百度手機助手、應用寶、豌豆莢和努比亞等9家應用商店,以及抖音和快手2家新型應用分發平
  • 微軟發布Windows 11新版 引入全新任務欄狀態

    近日,微軟發布了Windows 11新版,而Build 22563更新主要引入了幾周前曝光的平板模式任務欄等,系統更流暢了。更新中,Windows 11加入了專門針對平板優化的任務欄
Top 主站蜘蛛池模板: 渭南市| 郧西县| 普陀区| 八宿县| 鱼台县| 安多县| 东源县| 湘潭市| 泰宁县| 那曲县| 宁乡县| 台北县| 长沙市| 湘潭市| 昆明市| 赤城县| 浦县| 唐山市| 湘阴县| 通江县| 民丰县| 阿拉善盟| 德化县| 承德市| 宝鸡市| 甘洛县| 安阳市| 灵璧县| 德化县| 宽城| 安康市| 马尔康县| 佳木斯市| 喀喇沁旗| 鄂伦春自治旗| 繁昌县| 泰和县| 综艺| 河池市| 平凉市| 金乡县|