Go goroutine机理

本文详细介绍了Go语言中的协程(goroutine)概念,包括其轻量级线程的特点,如在单一系统线程中模拟并发执行,以及协程的挂起、运行和停止状态。文章还探讨了libtask库,它是实现协程的关键,包括任务管理、调度器、异步IO和channel。此外,还解释了任务创建、调度过程、上下文切换以及通信机制,强调了channel在goroutine通信中的作用。
摘要由CSDN通过智能技术生成

1.协程

   协程,也称为轻量级线程,具备以下几个特点:

   ·能够在单一的系统线程中模拟多个任务的并发执行;

   ·在一个特定的时间,只有一个任务在运行,即并非真正地并行;

   ·被动的任务调度方式,即任务没有主动抢占时间片的说法。当一个任务正在执行时,外部没有办法中止它。要进行任务切换,只能通过由该任务自身调用yield()来主动出让CPU使用权;

   ·每个协程都有自己的堆栈和局部变量;

    每个协程都包含3种运行状态:挂起、运行和停止。停止通常表示该协程已经执行完成(包括遇到问题后明确退出执行的情况),挂起则表示该协程尚未执行完成,但出让了时间片,以后有机会时会由调度器继续执行。

 

2.协程库(libtask)

   libtask库的下载地址是:http://swtch.com/libtask/,这个库的作者使用的是非常开放的授权协议,因此可以随意修改和使用这些代码,但是必须保持该份代码所附带的版权声明。

   这个libtask库实现了以下几个关键模块:

   ·任务及任务管理

   ·任务调度器

   ·异步IO

   ·channel

   这个静态库直接提供了一个main()入口函数作为协程的驱动,因此库的使用者只需按该库约定的规则实现任务函数taskmain(),启动后这些任务自然会被以协程的方式创建和调度执行。taskmain()函数的声明如下:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值