zoukankan      html  css  js  c++  java
  • Golang 实现守护主进程

         package main
    
            import (
                "fmt"
                "runtime"
                "sync"
                "time"
            )
    
            func test_goroutine()  {
                fmt.Println("函数被执行了*************************")
            }
    
            func main()  {
    
                // 测试多核并行化
                // 在执一些昂贵的计算任务时,如果希望使用服务器的多核特性来尽量将任务实现并行化,从而达到降低总计算时间的目的
                // 当前Golang版本并不能智能地发现和利用多核优势,如果不进行特殊声明,实际上所有的goroutine都运行在一个CPU核心上,
                // 当一个goroutine得到时间片执行的时候,其他goroutine都会处于等待状态.
                // 在Golang升级到默认支持多个CPU之前,我们可以先通过设置环境变量GOMAXPROCS的值, 或者在代码中启动goroutine之前
                // 先调用相应的方法设置使用多少个CPU核心
    
                // 获取cpu核心数
                num_cpu := runtime.NumCPU()
                // 设置使用的cpu的核心数
                runtime.GOMAXPROCS(num_cpu)
    
                // 使用sync包实现
                var wg sync.WaitGroup
    
                // 获取执行任务前的时间戳
                start_time := time.Now().Unix()
    
                for i:=0; i<=3200000; i++{
    
                    wg.Add(1) //添加WaitGroup计数器
    
                    go func() {
    
                        defer wg.Done() //defer标记当前函数作用域执行结束后 释放一个计数器,必须有这一步操作
    
                        fmt.Println("函数被执行了*************************")
                    }()
                }
    
                wg.Wait() //阻塞,直到WaitGroup中的计数器为0
    
                // 获取执行完成任务后的时间戳
                end_time := time.Now().Unix()
                fmt.Println(end_time-start_time)
    
                // 测试发现当进行简单的计算时,使用多核心和使用单核心执行时间上并没有出现差距, 资源的分配会出现时间损耗
                // 简单的计算不建议使用多核cpu进行高并发, 当进行昂贵复杂的计算最好经过充分的测试, 使用合适的核心数进行并发执行任务
            }
  • 相关阅读:
    Git fetch和git pull的区别
    git revert和git reset的区别
    JSF 与 HTML 标签的联系
    3. Decorator
    2. Observer
    1. Strategy
    继承构造函数的执行顺序
    模板特化
    8.1.2 Template instantiation (Accelerated C++)
    std::cin
  • 原文地址:https://www.cnblogs.com/lowmanisbusy/p/10090812.html
Copyright © 2011-2022 走看看