我开始学习节点和流似乎是你经常使用的东西,在我读过的大部分文档中都提到了处理大文件时的“背压问题”,但我没有找到明确的解释这个问题到底是什么。我也读过使用管道可以帮助解决这个问题,但是管道究竟是如何解决背压问题的?
感谢您提前进行任何解释。
我目前正在关注go教程,并进入了有关通道的部分,当我进行一些测试时,我发现了一个我很难理解的奇怪行为
以下代码会产生死锁错误
package main
import "fmt"
func main() {
c := make(chan string)
c <- "test"
fmt.Printf("%v", <- c)
}
Run Code Online (Sandbox Code Playgroud)
但执行以下操作之一可以修复代码
使用缓冲通道:
package main
import "fmt"
func main() {
c := make(chan string, 1)
c <- "test"
fmt.Printf("%v", <- c)
}
Run Code Online (Sandbox Code Playgroud)
或将值设置为不同线程上的通道
package main
import "fmt"
func main() {
c := make(chan string)
go func(){c <- "test"}()
fmt.Printf("%v", <- c)
}
Run Code Online (Sandbox Code Playgroud)
第一个版本的代码产生死锁的根本原因是什么?