您当前的位置: 首页 > 

衣舞晨风

暂无认证

  • 3浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Go 并发concurrency 学习笔记

衣舞晨风 发布时间:2017-08-13 07:16:00 ,浏览量:3

  • 很多人都是冲着 Go 大肆宣扬的高并发而忍不住跃跃欲试,但其实从源码的解析来看,goroutine 只是由官方实现的超级“线程池”而已。不过话说回来,每个实例 4-5KB 的栈内存占用和由于实现机制而大幅减少的创建和销毁开销,是制造 Go 号称的高并发的根本原因。另外,goroutine 的简单易用,也在语言层面上给予了开发者巨大的便利。
  • 并发不是并行:Concurrency Is Not Parallelism
  • 并发主要由切换时间片来实现“同时”运行,在并行则是直接利用多核实现多线程的运行,但 Go 可以设置使用核数,以发挥多核计算机的能力。
  • Goroutine 奉行通过通信来共享内存,而不是共享内存来通信。
Channel
  • Channel 是 goroutine 沟通的桥梁,大都是阻塞同步的
  • 通过 make 创建,close 关闭
  • Channel 是引用类型
  • 可以使用 for range 来迭代不断操作 channel
  • 可以设置单向或双向通道
  • 可以设置缓存大小,在未被填满前不会发生阻塞

通过channel计算10次,累加

方法一:

package main

import (
    "fmt"
    "runtime"
)

func main() {
    fmt.Println("NumCPU:", runtime.NumCPU())
    //获取cpu核心数量
    runtime.GOMAXPROCS(runtime.NumCPU())
    // channel bool类型 缓存长度为10
    c := make(chan bool, 10)
    for i := 0; i             
关注
打赏
1647422595
查看更多评论
1.4503s