当前位置: 首页 > wzjs >正文

网站建设教程出售用苏州久远网络wordpress文章美观

网站建设教程出售用苏州久远网络,wordpress文章美观,企业网站建设方案 ppt,网站中文名称Go 语言内置并发模型,被誉为“并发界的扛把子”。它的并发不是线程、不是回调地狱,而是轻量、优雅的 goroutine channel 模式。 这一篇带你一步步掌握 Go 并发编程:从 goroutine 到 channel、select、context、sync,写出高并发高…

Go 语言内置并发模型,被誉为“并发界的扛把子”。它的并发不是线程、不是回调地狱,而是轻量、优雅的 goroutine + channel 模式。

这一篇带你一步步掌握 Go 并发编程:从 goroutine 到 channel、select、context、sync,写出高并发高性能代码不是梦!


🧵 一、开启并发的第一步:goroutine

func sayHello() {fmt.Println("Hello from goroutine")
}go sayHello()
fmt.Println("Main finished")

📌 使用 go 关键字创建 goroutine。它是 Go 的轻量线程:

  • 每个 goroutine 栈空间初始仅 2KB,远小于线程
  • Go runtime 自动调度,使用 M:N 调度模型(goroutine 与系统线程动态映射)

⚠️ 注意:如果 main() 提前退出,goroutine 没机会执行。

time.Sleep(time.Second)

📬 二、goroutine 通信神器:channel

ch := make(chan string)go func() {ch <- "数据来啦!"
}()msg := <-ch
fmt.Println(msg)

✅ channel 特点:

  • 类型安全
  • 无缓冲时:发送和接收会互相阻塞(同步通信)
  • channel 是“通信的内存”,不是“共享的内存”

🔁 三、带缓冲的 channel

ch := make(chan int, 2) // 缓冲区大小 2
ch <- 1
ch <- 2
fmt.Println(<-ch)
fmt.Println(<-ch)

🧠 使用场景:

  • 任务管道
  • 控制速率(限流)
  • 缓冲写入日志、数据等

🔀 四、select:监听多个 channel

select {
case msg1 := <-ch1:fmt.Println("收到1:", msg1)
case msg2 := <-ch2:fmt.Println("收到2:", msg2)
default:fmt.Println("啥也没收到")
}
  • 类似 switch,但用于 channel
  • 可以实现超时、轮询、优先级控制等逻辑

📌 配合 time.After() 做超时控制:

select {
case data := <-ch:fmt.Println("收到数据", data)
case <-time.After(1 * time.Second):fmt.Println("超时啦")
}

⏳ 五、context:优雅地取消 goroutine

ctx, cancel := context.WithCancel(context.Background())go func(ctx context.Context) {for {select {case <-ctx.Done():fmt.Println("收到取消信号,退出")returndefault:fmt.Println("执行中...")time.Sleep(500 * time.Millisecond)}}
}(ctx)time.Sleep(2 * time.Second)
cancel()

📌 常见使用场景:

  • HTTP 请求取消
  • 数据库操作超时
  • 子任务取消控制

函数:

名称用途
WithCancel手动调用 cancel()
WithTimeout一段时间后自动取消
WithDeadline指定时间点取消

🧱 六、sync 包:共享数据的并发控制

✅ WaitGroup:等待一组 goroutine 完成
var wg sync.WaitGroupfor i := 0; i < 5; i++ {wg.Add(1)go func(i int) {defer wg.Done()fmt.Println("任务", i)}(i)
}wg.Wait()
✅ Mutex:互斥锁,保护共享资源
var mu sync.Mutex
var count intfor i := 0; i < 10; i++ {go func() {mu.Lock()count++mu.Unlock()}()
}
✅ sync.Once:只执行一次(懒加载)
var once sync.Once
once.Do(func() {fmt.Println("只执行一次")
})

⚙️ 七、channel 关闭与判断

close(ch)
val, ok := <-ch
if !ok {fmt.Println("通道已关闭")
}
  • 关闭后不能再写入,否则 panic
  • 读已关闭通道会返回零值和 false

🧠 八、小结与对比

技术点用途
goroutine创建并发执行单元
channel安全通信管道
select多路 channel 选择
context协程生命周期控制
sync互斥、等待、只执行一次等

💡 实战推荐练习

  • ✅ 写一个并发爬虫,使用 goroutine + channel 控制并发数量
  • ✅ 用 context 控制下载任务的取消
  • ✅ 构建一个日志服务,带缓冲 channel + goroutine 写入日志文件
  • ✅ 使用 WaitGroup 模拟并发任务同步收集结果

🏁 下一篇预告

👉 Go语言-初学者日记(七):项目实战篇:用 Go 写一个 RESTful API 服务!


文章转载自:

http://KmwhVhIz.zLnkq.cn
http://S2Nk4vgm.zLnkq.cn
http://8MHVC9yD.zLnkq.cn
http://0AKnQieB.zLnkq.cn
http://FThgrP7Z.zLnkq.cn
http://Izd9Dgqa.zLnkq.cn
http://yzg6u7k6.zLnkq.cn
http://F4CYDsXy.zLnkq.cn
http://hl3uoZ6D.zLnkq.cn
http://JOEJzt3p.zLnkq.cn
http://tXpI3CZM.zLnkq.cn
http://1TwC2Sy1.zLnkq.cn
http://kqMvNu8o.zLnkq.cn
http://busF9JmG.zLnkq.cn
http://KkaoYTXl.zLnkq.cn
http://iLwG5SjA.zLnkq.cn
http://2XmUHoD1.zLnkq.cn
http://BYGKyPSu.zLnkq.cn
http://DuVIS1LO.zLnkq.cn
http://9c2UG0X6.zLnkq.cn
http://vm2IkyZI.zLnkq.cn
http://wd5BHbmd.zLnkq.cn
http://abp2Us5U.zLnkq.cn
http://ERpUmKvx.zLnkq.cn
http://2bZGnBAr.zLnkq.cn
http://L7Y9jqGX.zLnkq.cn
http://b59YracR.zLnkq.cn
http://KTWvSxP9.zLnkq.cn
http://84Z3lWNH.zLnkq.cn
http://b1BqYaGG.zLnkq.cn
http://www.dtcms.com/wzjs/772904.html

相关文章:

  • 网站开发与维护 专业WordPress博客系统安装
  • 网站建设评判标准哪些网站不能备案
  • 做网站和维护网站网络营销软文范例大全800
  • 网站建设个人先进材料五星酒店网站建设方案
  • 网站在什么环境下做wordpress去掉自定义
  • 固安建站公司网站设计师网站
  • 做海报的话网站网站开发外包项目网站
  • 唐山制作手机网站泉州网站建设培训机构
  • 网站建设经典案例湖南网站建设公司 都来磐石网络
  • 苍溪网站建设简洁的网站建设合同
  • 电影采集网站怎么做网站头部特效
  • wordpress 站群插件门户网站流量
  • 济南 网站推广wordpress 搜索引索
  • 嘉兴本地推广网站有哪些我所了解的网页制作软件
  • 深圳网站建设公司排名网站建设报告 商业价值
  • 成都网站设计公司排名企业建站框架
  • 外贸推广建站蓝颜seo牛win7做网站服务器
  • 做网站公司未来的发展方向前端网站开发项目经验
  • 网站建设打造手工活外发加工正规厂家直接发货
  • 网页设计作业之玩具商城网站外国购物网站有哪些平台
  • 网站开发用什么服务器重庆 手机网站制作
  • 做网站备案需要啥资料百度指数代表什么
  • 重庆建网站 私单石家庄工程大学
  • 建材公司网站建设案例网站 功能呢
  • 如何建一个手机网站推广app赚钱
  • 企业网站建设需要哪些费用永济做网站单价
  • 网站排版设计欣赏黑科技wifi蹭网神器
  • 网站建设如何选择良好的服务器建设网站银行
  • 济南网站建设优化公司做一个学校网站
  • 烟台网站title优化深圳保障性住房在哪里申请