Rust和C标准库的线程安全噩梦:ARM64平台上的神秘崩溃

2025-01-22
Rust和C标准库的线程安全噩梦:ARM64平台上的神秘崩溃

EdgeDB团队在将Python网络I/O代码移植到Rust的过程中遭遇了ARM64平台上的神秘崩溃。起初怀疑是死锁,但最终发现是由于`setenv`和`getenv`函数的线程不安全问题导致的。在ARM64环境下,`openssl-probe`库使用`setenv`设置环境变量,而另一个线程同时调用`getenv`,导致`environ`数组被重新分配,最终引发崩溃。解决方法是将reqwest的TLS后端从rust-native-tls切换到rustls。这个案例说明了即使在Rust这种内存安全的语言中,仍然可能因为与C标准库的交互而出现线程安全问题。

阅读更多

优化 TypeScript 类型检查性能的方法

2024-08-14
优化 TypeScript 类型检查性能的方法

文章介绍了一种优化TypeScript类型检查性能的方法,作者称之为“BAM”方法,包括分支、调整和测量三个步骤。文章以EdgeDB查询构建器为例,详细讲解了如何使用--extendedDiagnostics和--generateTrace等工具测量类型检查性能,并使用@arktype/attest包进行基准测试。作者还分享了一些通用的优化建议,例如使用接口而不是交叉类型、命名条件类型、将昂贵的类型移入泛型以及条件顺序的影响等。

阅读更多
未分类