AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

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

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

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

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

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

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

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

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

情景

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

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

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

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

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

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

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

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

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

默認情況(Default)

在非高峰時段,訂單不多,Partier花費大量時間在等待上。他認為,他可以通過做其他事情來更有效地利用時間,例如清理桌子。這可以通過default來實現:98j28資訊網——每日最新資訊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語句中的通道可以是不同類型的。98j28資訊網——每日最新資訊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,通常不需要這樣做。98j28資訊網——每日最新資訊28at.com

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

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

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

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

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

標簽:
  • 熱門焦點
  • 轎車從天而降電動車主被撞身亡 超速搶道所致:現場視頻讓網友吵翻

    近日,上海青浦區法院判決轎車從天而降電動車主被撞身亡案,轎車車主被判有期徒刑一年。案件顯示當時男子駕駛轎車在上海某路段行駛,前車忽然轉彎提速超車,
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業發布的ESG報告。ESG是&ldquo;環境保
  • OPPO、vivo、小米等國內廠商Q2在印度智能手機市場份額依舊高達55%

    7月20日消息,據外媒報道,研究機構的報告顯示,在全球智能手機出貨量同比仍在下滑的大背景下,印度這一有潛力的市場也未能幸免,出貨量同比也有下滑,多家廠
  • AI藝術欣賞體驗會在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯的鏡像世界,虛實幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場景都出現在2019世界人工智能大會的舞臺上。8月29日至31日,“AI藝術欣賞體驗會”在上海
Top