2个不稳定版本

0.6.0 2022年11月23日
0.5.1 2022年11月23日
0.5.0 2021年1月22日
0.4.3 2020年9月2日
0.1.1 2020年5月10日

并发中排名440

每月下载量44
用于wfqueue

MIT许可证

18KB
412

对象线程局部存储

高效的线程对象线程局部存储实现。

thread_local crate不同,它通常在线程结束时释放对象,即使它会在其他线程中释放对象,但不会让其他线程使用旧对象(参见playground文档)。

os-thread-local crate不同,它只使用Rust标准库的std::thread_local!抽象,不使用任何其他平台相关的API。这意味着它的容量不受PTHREAD_KEYS_MAX的限制。

并且它的性能相对较好,对于少于N个线程的值访问是完全无锁的,具有O(1)的时间复杂度。但由于我们在std::thread_local!中存储线程ID,所以它的速度会比std::thread_local!略慢。

std::thread_local!      time:   [1.5702 us 1.5725 us 1.5751 us]
                        change: [-3.6008% -0.8194% +1.2594%] (p = 0.58 > 0.05)
                        No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
  7 (7.00%) high severe

per-thread-object       time:   [1.6411 us 1.6545 us 1.6697 us]
                        change: [-0.4540% +1.1403% +2.6958%] (p = 0.16 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  6 (6.00%) high mild
  3 (3.00%) high severe

thread_local            time:   [2.7854 us 2.7996 us 2.8142 us]
                        change: [-3.9626% -3.0122% -1.9548%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) high mild
  2 (2.00%) high severe

os-thread-local         time:   [1.5628 us 1.5708 us 1.5801 us]
                        change: [-2.7584% +0.1343% +3.1291%] (p = 0.94 > 0.05)
                        No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
  2 (2.00%) high mild
  8 (8.00%) high severe

许可证

本项目采用MIT许可证

依赖项

~0–24MB
~332K SLoC