无缓冲 Channel 如何处理数据不及时?
无缓冲 Channel 处理数据不及时
当在无缓冲 Channel 中,发送数据的速度远大于接收和处理数据的速度时,需要探讨两种情况:
发送数据 Goroutine 阻塞
在无缓冲 Channel 中,没有数据缓存区。如果接收 Goroutine 无法及时处理数据,发送 Goroutine 将会阻塞,一直等到接收 Goroutine准备好接收数据。这种阻塞式行为可以保证数据不会丢失。
类比:就像两个人直接传递东西,只有接收者准备就绪才能接收,否则发送者必须等待。
无缓冲 Channel 中不存在数据满的情况。如果发送的数据没有被及时处理,数据不会被保存,而是会被丢弃。这是因为没有存储数据的空间,当接收 Goroutine 准备接收时,未处理的数据已经不复存在。
类比:与上面不同,两个人传递东西时,中间没有箱子储存。如果接收者不及时接收,东西会直接掉在地上,也就是数据被丢弃。
以上就是无缓冲 Channel 如何处理数据不及时?的详细内容,更多请关注其它相关文章!