go 并发 —— 摘自go语言学习笔记

  1. 只须在函数调用前添加go关键字即可创建并发任务
  2. 关键字go并非执行并发操作,而是创建一个并发任务单元。新建任务被放置在系统队列中,等待调度器安排合适系统线程去获取执行权。当前流程不会阻塞,不会等待该任务启动,且运行时也不保证并发任务的执行次序
  3. 运行时可能会创建很多线程,但任何时候仅有有限的几个线程参与并发任务执行。该数量默认与处理器核数相等,可用runtime.GOMAXPROCS函数(或环境变量)修改。如参数小于1,GOMAXPROCS仅返回当前设置值,不做任何调整
  4. 尽管可用make创建单向通道,但那没有任何意义。通常使用类型转换来获取单向通道,并分别赋予操作双方。不能在单向通道上做逆向操作,同样,close不能用于接收端。无法将单向通道重新转换回去
    func main() {
    	c := make(chan int, 2)
    	var recv <-chan int = c
    	close(recv)   // 无效操作:close(recv) (cannot close receive-only channel)
    }
    
  5. 将发往通道的数据打包,减少传输次数,可有效提升性能。从实现上来说,通道队列依旧使用锁同步机制,单次获取更多数据(批处理),可改善因频繁加锁造成的性能问题
  6. mutex不支持递归锁,即便在同一goroutine下也会导致死锁
  7. 将mutex作为匿名字段时,相关方法必须实现为pointer-receiver,否则会因复制导致锁机制失效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值