2024 Rust中国大会大会将于 9 月 07 日 - 08 日在上海举办。精彩议题逐步放出中。
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的并发模型很有帮助。
https://leon.schuermann.io/blog/2024-08-07_rust-mutex-atomics-unsafecell_spooky-action-at-a-distance.html
--
From 日报小组 Mike
社区学习交流平台订阅:
Rustcc论坛: 支持rss
微信公众号:Rust语言中文社区