Go語言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)行處理,然后寫入到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語言tunny的workerWrapper使用教程示例的詳細(xì)內(nèi)容,更多關(guān)于go tunny workerWrapper教程的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言使用釘釘機(jī)器人推送消息的實(shí)現(xiàn)示例
本文主要介紹了Go語言使用釘釘機(jī)器人推送消息的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Go語言獲取系統(tǒng)性能數(shù)據(jù)gopsutil庫的操作
這篇文章主要介紹了Go語言獲取系統(tǒng)性能數(shù)據(jù)gopsutil庫的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Golang常用環(huán)境變量說明與設(shè)置詳解
這篇文章主要介紹了Golang常用環(huán)境變量說明與設(shè)置,需要的朋友可以參考下2020-02-02
Golang時間及時間戳的獲取轉(zhuǎn)換超全面詳細(xì)講解
說實(shí)話,golang的時間轉(zhuǎn)化還是很麻煩的,最起碼比php麻煩很多,下面這篇文章主要給大家介紹了關(guān)于golang時間/時間戳的獲取與轉(zhuǎn)換的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
詳解Go?flag實(shí)現(xiàn)二級子命令的方法
這篇文章主要介紹了Go?flag?詳解,實(shí)現(xiàn)二級子命令,本文就探討一下?Go?語言中如何寫一個擁有類似特性的命令行程序,需要的朋友可以參考下2022-07-07
Go實(shí)現(xiàn)自動解壓縮包以及讀取docx/doc文件內(nèi)容詳解
在開發(fā)過程中,我們常常需要處理壓縮包和文檔文件。本文將介紹如何使用Go語言自動解壓縮包和讀取docx/doc文件,需要的可以參考一下2023-03-03
使用Go語言統(tǒng)計文件中每個字母出現(xiàn)頻率的方法
這篇文章主要介紹了如何使用Go語言統(tǒng)計文件中每個字母出現(xiàn)頻率 的完整內(nèi)容,本案例適合用來練習(xí)文件讀取、字符處理、map統(tǒng)計等基礎(chǔ)技能,感興趣的小伙伴跟著小編一起來看看吧2025-07-07

