最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言tunny的workerWrapper使用教程示例

 更新時間:2023年07月14日 14:22:42   作者:codecraft  
這篇文章主要為大家介紹了Go語言tunny的workerWrapper使用教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

本文主要研究一下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

tunny

以上就是Go語言tunny的workerWrapper使用教程示例的詳細(xì)內(nèi)容,更多關(guān)于go tunny workerWrapper教程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

长宁区| 瑞安市| 菏泽市| 河源市| 伊吾县| 女性| 秦皇岛市| 焉耆| 湖南省| 民勤县| 中牟县| 罗城| 芜湖市| 广河县| 哈巴河县| 禹州市| 来宾市| 荥经县| 宕昌县| 湄潭县| 滕州市| 苍梧县| 偃师市| 霍林郭勒市| 江口县| 怀远县| 正镶白旗| 连南| 通渭县| 新郑市| 葫芦岛市| 青铜峡市| 华亭县| 太原市| 潢川县| 黎平县| 娄烦县| 凭祥市| 左云县| 逊克县| 都昌县|