关于GO的协程

go的协程是基于用户态的线程,CPU并不知道协程的存在,非常轻量。
创建的语法 go function();
goroutine(协程)占用的内存比java、c的线程少。很轻易的做到上百万并发。
并且协程的切换比线程切换开销小很多,性能比较好。协程和channel配合使用(类似生产者消费者模型可以做到很高性能的web server。),go目前作为云计算主要语言还是很厉害的

以下列子创建了2个协程,执行结果:说明协程是并行的,并且当主线程退出,协程也会退出

begin 0s
协程2: 1, 0s
协程1: H , 0s
协程1: E , 10.9392ms
协程2: 2, 15.0566ms
协程1: L , 21.6407ms
协程2: 3, 30.142ms
协程1: L , 32.1343ms
协程1: O , 42.6038ms
协程2: 4, 45.579ms
end 100.1094ms
package main

import (
	"fmt"
	"time"
)

/**
协程并行
*/
func printChar(s string) {
	for _, c := range s {
		fmt.Printf("协程1: %c , %v\n", c, time.Since(start))
		time.Sleep(10 * time.Millisecond)
	}
}
func printArr(s []int) {
	for _, d := range s {
		fmt.Printf("协程2: %d, %v\n", d, time.Since(start))
		time.Sleep(15 * time.Millisecond)
	}
}

var start time.Time

func init() {
	start = time.Now()
}
func main() {
	fmt.Println("begin", time.Since(start))

	go printChar("HELLO") //协程1

	go printArr([]int{1, 2, 3, 4}) //协程2
	time.Sleep(100 * time.Millisecond)
	fmt.Println("end", time.Since(start))
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值