通道(channel)和队列(queue)的区别

本文通过实验对比的方式,深入浅出地解释了通道与队列的本质区别:队列作为一个存储结构,可以自行存取数据;而通道则需要指定另一端,并且只能由另一端接收数据。文中还列举了几种不同类型的通道。
部署运行你感兴趣的模型镜像

问题

有人会有疑问,通道和队列都是可以丢一些数据进去,可以拿一些数据出来。比如通道有read和write的方法,队列有put和take的方法,通道和队列有什么区别呢?为什么一个叫做通道,一个叫做队列呢?

诱导

如果要从各方面来比较的话,会容易把人给说晕了。其实它们最根本最本质的区别就一个。只要这一点把握住了,理解透了,那么其他的不同就引刃而解了。而如果这一点都没有搞明白的话,其他东西说的再多,也是白搭。

实验

大家有没有做过这样一个实验。假设一个程序(或者一个线程),它有一个通道变量叫做channel,也有一个队列变量叫做queue。当这个线程调用queue.put(“我靠”)之后,再继续调用queue.take(),就可以把”我靠”又取了出来。但是如果这个线程调用channel.write(“我靠”),再调用一万遍channel.read(),你也不可能读到”我靠”了。

这么一说,大家有没有发现本质区别了?

解答

队列对象就是一个存储,你扔东西进去,你自己也可以把它再拿出来。但是初始化通道变量的时候,你必须指定这个通道的另一端。你丢东西进去,就像丢到一个下水管道里面一样,你自己是拿不出来的。只有通道的另一端才可以拿到这个数据。

  • FileChannel (管道的另一端是文件)
  • DatagramChannel (管道的另一端是基于UDP协议的client)
  • SocketChannel (管道的另一端是socket套接字,基于tcp的client)

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值