9、Go语言并发与基础特性详解

Go语言并发与基础特性详解

1. Go语言中的Goroutine

Goroutine是Go语言中轻量级的执行单元,它的调度机制灵活。当Goroutine阻塞执行或主动放弃线程时,其线程会被分离并分配给其他Goroutine。若Goroutine发起阻塞的操作系统调用,Go调度器也能分离线程。调度器可能有两个线程池,一个用于CPU密集型Goroutine,另一个用于I/O密集型Goroutine。

Go语言对操作系统线程的控制手段有限,可以通过 GOMAXPROCS 环境变量和 runtime.GOMAXPROCS(n int) 函数设置运行Goroutine可用的最大CPU(或核心)数。

Go语言还能通过 Context 以编程方式取消或超时处理长时间运行的异步进程,如Goroutine中的循环、网络或数据库请求等。 Context 还提供一个通道,用于通知监听器长时间运行的进程已完成(正常完成或超时)。

  • runtime.Goexit() 函数:在运行完所有延迟函数后终止调用的Goroutine。主函数运行在一个Goroutine上,当主Goroutine退出(返回)时,程序结束,这类似于JVM在所有非守护线程结束时终止。
  • runtime.Gosched() 函数:使当前Goroutine主动放弃其线程,但仍保持可运行状态,类似于Java中的 Thread.yield() ,在长时间运行的代码段(如循环)中使用效果较
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值