• go 创建携程池,开启并发


    地址;https://github.com/panjf2000/ants

    采用蚂蚁池开源的SDK,ants 是一个高性能且低损耗的 goroutine 池

    package main

    import (
    "fmt"
    "sync"
    "sync/atomic"
    "time"

    "github.com/panjf2000/ants"
    )

    var sum int32

    func myFunc(i interface{}) {
    n := i.(int32)
    atomic.AddInt32(&sum, n)
    fmt.Printf("run with %d ", n)
    }

    func demoFunc() {
    time.Sleep(10 * time.Millisecond)
    fmt.Println("Hello World!")
    }

    func main() {
    defer ants.Release()

    runTimes := 1000

    // Use the common pool.
    var wg sync.WaitGroup
    syncCalculateSum := func() {
    demoFunc()
    wg.Done()
    }
    for i := 0; i < runTimes; i++ {
    wg.Add(1)
    _ = ants.Submit(syncCalculateSum)
    }
    wg.Wait()
    fmt.Printf("running goroutines: %d ", ants.Running())
    fmt.Printf("finish all tasks. ")

    // Use the pool with a method,
    // set 10 to the capacity of goroutine pool and 1 second for expired duration.
    fn := func(i interface{}) {
    myFunc(i)
    wg.Done()
    }
    var mmm []func(i ants.Options)

    fno := func(i ants.Options) {
    i.PreAlloc = false
    i.MaxBlockingTasks = 100
    }
    mmm = append(mmm, fno)

    var hhh ants.Option // 设置携程
    lll := &ants.Options{}
    lll.PreAlloc = false
    lll.MaxBlockingTasks = 100
    hhh(lll)
    p, _ := ants.NewPoolWithFunc(10, fn, hhh)
    defer p.Release()
    // Submit tasks one by one.
    for i := 0; i < runTimes; i++ {
    wg.Add(1)
    _ = p.Invoke(int32(i))
    }
    wg.Wait()
    fmt.Printf("running goroutines: %d ", p.Running())
    fmt.Printf("finish all tasks, result is %d ", sum)
    if sum != 499500 {
    panic("the final result is wrong!!!")
    }
    }
  • 相关阅读:
    文件处理
    字符编码的了解以及简单的文件处理
    python list去重加set排序
    数据的类型以及内置方法
    Python 入门 Day5
    Python 入门 Day3
    Python的入门
    计算机硬件
    【0903 | Day 29】反射和内置方法
    【0902 | Day 28】绑定方法和非绑定方法
  • 原文地址:https://www.cnblogs.com/smallleiit/p/12420435.html
Copyright © 2020-2023  润新知