💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
## goroutine 在函数或方法前使用go来启动一个goroutine. 主函数就是一个goroutine,叫main goroutine,当主函数结束的时候,所有goroutine都会结束.除了从主函数退出或者直接终止程序之外,没有其它的编程方法能够让一个goroutine来打断另一个的执行,但是之后可以看到一种方式来实现这个目的,通过goroutine之间的通信来让一个goroutine请求其它的goroutine,并让被请求的goroutine自行结束执行。 ## 几种goroutine使用情况 使用goroutine不一定需要channel,但是使用channel一定需要goroutine. 1. 单纯的goroutine,不使用channel,可以使用waitgroup来进行等待. 2. 使用goroutine和channel,并且需要处理完一个goroutine,就要一个结果,那可以使用range来处理channel的结果. ## goroutine和锁 使用并发的时候如何对共享数据进行处理呢? 我的理解是,goroutine运行过程中产生的数据使用channel,而其他使用锁. ## channel channel的作用是用来同步goroutine的数据的.如果单独启动goroutine,该goroutine执行结束后会自动关闭.但是如果使用了channel,那么必须对channel进行close处理,否则,接收该channel的地方会一直阻塞住. **其实你并不需要关闭每一个channel。只有当需要告诉接收者goroutine,所有的数据已经全部发送时才需要关闭channel。不管一个channel是否被关闭,当它没有被引用时将会被Go语言的垃圾自动回收器回收。**