zoukankan      html  css  js  c++  java
  • [Go] gocron源码阅读-groutine与channel应用到信号捕获

    直接使用go 函数名()可以开启一个grountine,channel可以接收信息并且如果没有数据时会阻塞住
    channel对应的是底层数据结构的引用,复制channel和函数传参都是拷贝的引用
    make的时候第二个参数是1,就表示是有缓存的channel

    无缓存的channel也叫同步channel

        c = make(chan interface{})
        //开启groutine
        go mySig()
        //主grountine不能断
        for {
            time.Sleep(time.Second)
            c <- "taoshihan"
        }
    func mySig() {
        for {
            str := <-c
            fmt.Println(str)
        }
    }

    信号处理使用channel通信

    func catchSignal() {
        c := make(chan os.Signal, 1)
        signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
        for {
            s := <-c
            logger.Info("收到信号 -- ", s)
            switch s {
            case syscall.SIGHUP:
                logger.Info("收到终端断开信号, 忽略")
            case syscall.SIGINT, syscall.SIGTERM:
                shutdown()
            }
        }
    }

    完整代码:

    package main
    
    import (
        "fmt"
        "os"
        "os/signal"
        "syscall"
        "time"
    )
    
    var c chan interface{}
    
    func main() {
        go catchSignal()
    
        c = make(chan interface{})
        //开启groutine
        go mySig()
        //主grountine不能断
        for {
            time.Sleep(time.Second)
            c <- "taoshihan"
        }
    
    }
    func mySig() {
        for {
            str := <-c
            fmt.Println(str)
        }
    }
    func catchSignal() {
        d := make(chan os.Signal, 1)
        signal.Notify(d, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
        for {
            s := <-d
            fmt.Println("收到信号 -- ", s)
            switch s {
            case syscall.SIGHUP:
                fmt.Println("收到终端断开信号, 忽略")
            case syscall.SIGINT, syscall.SIGTERM:
                //这里可以做一些退出动作
                fmt.Println("关闭")
                os.Exit(0)
            }
        }
    }
  • 相关阅读:
    最长上升子序列(矩形嵌套)
    中国剩余定理模板poj1006
    POJ 2891 扩展欧几里德
    2015多校联赛第三场(部分题解)
    树链剖分
    深度理解链式前向星
    POJ 1228 Grandpa's Estate(凸包)
    旋转卡壳(一)
    最小圆覆盖 hdu 3007
    半平面求交 模板
  • 原文地址:https://www.cnblogs.com/taoshihan/p/11871405.html
Copyright © 2011-2022 走看看