9、Go语言特性与Java对比详解

Go与Java特性对比详解

Go语言特性与Java对比详解

1. Go语言中的Goroutine调度与控制

在Go语言里,若goroutine执行操作导致其执行受阻,或者主动放弃线程,它的线程会被分离并分配给其他goroutine。当goroutine发起阻塞式操作系统调用时,Go调度器同样能分离线程。所以,调度器可能存在两个线程池,一个用于CPU密集型goroutine,另一个用于I/O密集型goroutine。

Go提供了有限的方式来控制用于执行goroutine的操作系统线程。我们可以通过 GOMAXPROCS 环境变量和 runtime.GOMAXPROCS(n int) 函数来设置运行goroutine可用的最大CPU(或核心)数量。

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

runtime.Goexit() 函数会在运行完所有延迟函数后终止调用的goroutine。要注意, main 函数运行在一个goroutine上,当 main 函数所在的goroutine退出(返回)时,程序就会结束,这和所有非守护线程结束时JVM结束的情况类似。

runtime.Gosched() 函数会使当前goroutine主动放弃其线程,但仍保持可运行状态,这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值