QUIC协议的一些基操解释
这篇文章讨论了如何在不丢失数据的情况下正确关闭一个QUIC连接。作者指出,关闭QUIC连接的关键在于协调好发送方和接收方的操作。只有接收最后一批数据的接收方应该关闭连接,以确保所有数据都已成功传输并读取。文章还解释了QUIC连接和流的状态,强调了为什么不能依赖某些状态来判断数据的接收情况。这种关闭方式对于保证数据完整性至关重要。
https://www.iroh.computer/blog/closing-a-quic-connection
Rust实现的一个狭义相对论模拟
https://sogebu.github.io/special-relativity-web/20240810/#simulations
Rust中的Mutex, Atomics 和 UnsafeCell
这篇文章主要讨论了Rust中的Mutex、Atomics和UnsafeCell的实现原理和相关概念:
-
文章通过自定义实现AtomicUsize来探讨原子操作的原理。作者发现简单使用UnsafeCell并不能实现真正的原子性,因为编译器会对其进行优化。
-
真正的原子操作需要使用编译器内部函数(intrinsics)来实现,这些函数不仅生成原子指令,还会告诉编译器不要对其进行优化。
-
Mutex的实现基于UnsafeCell和一个原子整数。获取锁时使用原子的compare_exchange操作,释放锁时使用原子操作配合内存顺序(memory ordering)来保证可见性。
-
内存顺序(如Acquire和Release)不仅影响生成的机器指令,还会限制编译器的优化,从而保证跨线程的内存访问顺序。
-
VolatileCell用于嵌入式系统中访问内存映射I/O。它使用volatile读写操作,但仍存在一些安全性问题。
-
volatile操作与原子操作不同,不能建立happens-before关系。对于DMA等操作,需要额外使用内存屏障(fence)来保证顺序。
-
文章深入探讨了UnsafeCell、原子操作、内存顺序等概念如何在底层影响Rust的并发安全性,对理解Rust的并发模型很有帮助。
--
From 日报小组 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论