为了账号安全,请及时绑定邮箱和手机立即绑定

【备战春招】第6天 Go语言语法进阶指南-并发

标签:
Go

课程章节:并发

课程讲师:Gavin

课程内容:

  1. 协程

图片描述

  1. 通信

图片描述

package gorotine

import "fmt"

var chanInt chan int = make(chan int, 10)
var timeout chan bool = make(chan bool)

func Loop() {
    for i:=1; i<11; i++ {
        time.Sleep(time.Microsecond * 10)
        fmt.Printf("%d,",i)
    }
}
// 协程一 发送
func send() {
    time.Sleep(time.Second * 1) //打印时睡眠下
    chanInt <- 1
    time.Sleep(time.Second * 1)
    chanInt <- 2
    time.Sleep(time.Second * 1)
    chanInt <- 3
    time.Sleep(time.Second * 2)
    timeout <- true
}

// 协程二 接收chan数据
func Receive(){
    // num_:= <- chanInt
    // fmt.Println("mun:",num)
    // num = <- chanInt
    // fmt.PrintIn("mun: ",num)
    // num = <- chanInt
    // fmt.PrintIn("mun: ",num)

    for {
        select {
        case num := <-chanInt:
            fmt.PrintIn("mun:",num)
        case num <-timeout:
            fmt.PrintIn("timeout:",num)
    }
}
package main

import "fmt"

func main() {
    // 并发 获取核心数
    // fmt.Printf("cpu num = %d", runtime.NumCPU())
    // // 用runtime的api限制go程序的运行核心数 设置最大的cpu个数
    // runtime.GOMAXPROCS(runtime.NumCPU() - 1 )
    // // 用go关键字启动协程 两个协程并行
    // go gorotine.Loop()
    // go gorotine.Loop()
    // time.Sleep(time.Second * 60)

    // 启动发送数据的协程
    go gorotine.Send()
    // 启动接收数据的协程
    go gorotine.Receive()

    time.Sleep(time.Second * 60)
}

课程收获:

图片描述

  1. 并发的实现:协程
  2. 通信:协程之间的交互,channel
  3. 同步:避免数据的错漏和覆盖
  4. 在程序前面添加 go 关键字
  5. 协程读取数据使用箭头
  6. 保证一致性:多个读,一个写
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消