Go併發模式 設計模式之複製請求

2021-09-20 15:25:59 字數 1107 閱讀 6390

複製請求

程式正在處理 使用者的http請求, 或者檢索乙個資料塊。你可以將請求分發到多個處理程式(無論是 goroutine ,程序, 還是伺服器),其中乙個將比其他

處理程式返回更快,可以 立即返回結果。

下面例子 在 單個程序中, 使用多個goroutine 作為處理程式。

goroutine 將隨機休眠一段時間以模擬不同的負載,

func main() , id int, wg *sync.waitgroup, result chan <- int) 

select

took := time.since(started)

//顯示處理程式需要多長時間

if took < simulatedloadtime

fmt.printf("%v took %v\n", id, took)

} done := make(chan inte***ce{})

result := make(chan int)

var wg sync.waitgroup

wg.add(10)

for i := 0; i<10; i++

firstreturned := <- result

close(done)

wg.wait()

fmt.printf("received an answer from #%v\n", firstreturned)

}//6 took 1.002598933s

//0 took 1.002687636s

//9 took 2s

//2 took 5s

//3 took 1.002655195s

//4 took 3s

//5 took 2s

//1 took 3s

//8 took 4s

//7 took 2s

//received an answer from #6

所有的處理程式 都應該是盡可能 等價的,有相同的機會處理請求。

建立和維護這樣一套系統 有很大的代價, 但如果你追求的是響應速度, 那是一種非常有價值的架構。這種方式天然提供了容錯 和 可擴充套件性。

Go 設計模式 策略模式

策略模式定義了演算法家族,在呼叫演算法家族的時候不感知演算法的變化,客戶也不會受到影響。下面用 大話設計模式 中的乙個例項進行改寫。例 超市中經常進行 活動,活動的 方法就是乙個個策略,如 滿一百減20 打八折 等。現在實現策略模式,用cashcontext生產策略,並完成策略的呼叫。1.首先定義所...

Go併發模式之 約束

約束 在編寫併發 的時候,有以下幾種不同的保證操作安全的方法。1。用於共享記憶體的同步原語 如sync.mutex 2.通過通訊來 共享記憶體來進行同步 如 channel 在併發處理中還有其他幾種情況也是隱式併發安全的 3。不會發生改變的資料 4。受到保護的資料 約束 特定約束,和 詞法約束 特定...

GO設計模式3 策略模式

所謂策略其實就是做一件事情有很多很多的方法,比如說乙個商場要搞 的方式有可能有很多 打折啊,滿100返50啊 積分等等之類的。這種不同的 方式在我們系統中表示就是乙個乙個的策略,並且策略是可以隨時更換的,這個時候在設計系統時就可以使用策略模式。type strategy inte ce策略一 typ...