Go語(yǔ)言tunny的workerWrapper使用教程示例
序
本文主要研究一下tunny的workerWrapper
workerWrapper
type workerWrapper struct { worker Worker interruptChan chan struct{} // reqChan is NOT owned by this type, it is used to send requests for work. reqChan chan<- workRequest // closeChan can be closed in order to cleanly shutdown this worker. closeChan chan struct{} // closedChan is closed by the run() goroutine when it exits. closedChan chan struct{} } func newWorkerWrapper( reqChan chan<- workRequest, worker Worker, ) *workerWrapper { w := workerWrapper{ worker: worker, interruptChan: make(chan struct{}), reqChan: reqChan, closeChan: make(chan struct{}), closedChan: make(chan struct{}), } go w.run() return &w }
workerWrapper包裝了worker,定義了interruptChan、reqChan、closeChan、closedChan屬性
interrupt
func (w *workerWrapper) interrupt() { close(w.interruptChan) w.worker.Interrupt() }
interrupt方法關(guān)閉w.interruptChan,執(zhí)行w.worker.Interrupt()
run
func (w *workerWrapper) run() { jobChan, retChan := make(chan interface{}), make(chan interface{}) defer func() { w.worker.Terminate() close(retChan) close(w.closedChan) }() for { // NOTE: Blocking here will prevent the worker from closing down. w.worker.BlockUntilReady() select { case w.reqChan <- workRequest{ jobChan: jobChan, retChan: retChan, interruptFunc: w.interrupt, }: select { case payload := <-jobChan: result := w.worker.Process(payload) select { case retChan <- result: case <-w.interruptChan: w.interruptChan = make(chan struct{}) } case _, _ = <-w.interruptChan: w.interruptChan = make(chan struct{}) } case <-w.closeChan: return } } }
run首先創(chuàng)建jobChan、retChan,然后for循環(huán)執(zhí)行select讀取reqChan,之后讀取jobChan的payload,進(jìn)行處理,然后寫(xiě)入到retChan
stop
func (w *workerWrapper) stop() { close(w.closeChan) }
stop方法關(guān)閉w.closeChan
join
func (w *workerWrapper) join() { <-w.closedChan }
join方法則等待w.closedChan
小結(jié)
tunny的workerWrapper包裝了worker,定義了interruptChan、reqChan、closeChan、closedChan屬性,它提供了interrupt、run、stop、join方法。
doc
以上就是Go語(yǔ)言tunny的workerWrapper使用教程示例的詳細(xì)內(nèi)容,更多關(guān)于go tunny workerWrapper教程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
goland2020.2.x永久激活碼破解詳細(xì)教程親測(cè)可用(Windows Linux Mac)
這篇文章主要介紹了goland2020.2.x永久激活碼破解詳細(xì)教程親測(cè)可用(Windows Linux Mac) ,對(duì)goland激活碼注冊(cè)碼相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2020-11-11Go語(yǔ)言并發(fā)之Select多路選擇操作符用法詳解
Go?語(yǔ)言借用多路復(fù)用的概念,提供了?select?關(guān)鍵字,用于多路監(jiān)聽(tīng)多個(gè)通道,本文就來(lái)和大家聊聊Go語(yǔ)言中Select多路選擇操作符的具體用法,希望對(duì)大家有所幫助2023-06-06golang基于Mutex實(shí)現(xiàn)可重入鎖
鎖可重入也就是當(dāng)前已經(jīng)獲取到鎖的goroutine繼續(xù)調(diào)用Lock方法獲取鎖,Go標(biāo)準(zhǔn)庫(kù)中提供了sync.Mutex實(shí)現(xiàn)了排他鎖,但并不是可重入的,所以本文給大家介紹了golang基于Mutex實(shí)現(xiàn)可重入鎖,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2024-03-03使用Go語(yǔ)言中的Context取消協(xié)程執(zhí)行的操作代碼
在 Go 語(yǔ)言中,協(xié)程(goroutine)是一種輕量級(jí)的線程,非常適合處理并發(fā)任務(wù),然而,如何優(yōu)雅地取消正在運(yùn)行的協(xié)程是一個(gè)常見(jiàn)的問(wèn)題,本文將通過(guò)一個(gè)具體的例子來(lái)展示如何使用 context 包來(lái)取消協(xié)程的執(zhí)行,需要的朋友可以參考下2024-11-11使用Go語(yǔ)言創(chuàng)建error的幾種方式小結(jié)
Go語(yǔ)言函數(shù)(或方法)是支持多個(gè)返回值的,因此在Go語(yǔ)言的編程哲學(xué)中,函數(shù)的返回值的最后一個(gè)通常都是error類型,所以本文給大家介紹了使用Go語(yǔ)言創(chuàng)建error的幾種方式小結(jié),文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-01-01CentOS7使用yum安裝Golang的超詳細(xì)步驟
CentOS默認(rèn)并沒(méi)有安裝golang運(yùn)行環(huán)境,下面這篇文章主要給大家介紹了關(guān)于CentOS7使用yum安裝Golang的超詳細(xì)步驟,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02