zoukankan      html  css  js  c++  java
  • Go语言最佳实践——通道和并发

    何时关闭通道:

    第一,只有在后面要检查通道是否关闭的时候才需要显式地关闭通道;

    第二,应该由发送端的goroutine关闭通道,而不是由接收端的goroutine来完成;

    第三,如果通道并不需要检查是否被关闭,那么不关闭这些通道并没有什么问题,因为通道非常轻量,因此它不会像打开文件不关闭那样耗尽系统资源。

    两个陷阱:

    1、程序完成时我们没得到任何结果

    因为主gorouting退出后,其他的工作goroutine也会退出,所以必须保证所有工作goroutine都完成后才让主goroutine退出。

    2、死锁

    有两种情况下可能发生死锁:

    第一种是即使所有的工作都已经完成了,但是主goroutine和工作goroutine还存活,这种情况通常是由于工作完成了但是主goroutine无法获得工作goroutine的完成状态。

    第二种是当两个不同的goroutine都锁定了受保护的资源而且同时尝试去获得对方资源的时候,一般在使用锁的时候才会出现。

  • 相关阅读:
    [CQOI2015]选数
    [AHOI2009]中国象棋
    [ZJOI2012]灾难
    [NOI2018]屠龙勇士
    [APIO2016]划艇
    [ZJOI2011]礼物
    cent 7 识别exfat
    C语言风格的 for 循环(SHELL的循环写法 已验证20200517)
    系统安装时间
    单用户模式修改root密码
  • 原文地址:https://www.cnblogs.com/wenjingu/p/3513246.html
Copyright © 2011-2022 走看看