#thread #process #cpu #core #api-bindings

affinity

为当前正在运行的线程和进程提供了一种设置核心亲和力的统一方式

3 个版本

0.1.2 2021年10月16日
0.1.1 2020年4月3日
0.1.0 2020年4月3日

196操作系统 中排名

Download history 2637/week @ 2024-03-14 2759/week @ 2024-03-21 1953/week @ 2024-03-28 2586/week @ 2024-04-04 2486/week @ 2024-04-11 2995/week @ 2024-04-18 2561/week @ 2024-04-25 2114/week @ 2024-05-02 2357/week @ 2024-05-09 2300/week @ 2024-05-16 3002/week @ 2024-05-23 2401/week @ 2024-05-30 2499/week @ 2024-06-06 2728/week @ 2024-06-13 2706/week @ 2024-06-20 2260/week @ 2024-06-27

每月下载量 10,785
8 个crate(3 个直接)中使用

MIT/Apache

13KB
211

亲和力

Build Status crates.io mio Lines of Code

此crate提供了一种统一的方式,用于设置当前正在运行的线程和进程的核心亲和力。

用法

use affinity::*;
fn bind_even_cores() {
    // Select every second core
    let cores: Vec<usize> = (0..get_core_num()).step_by(2).collect();
    println!("Binding thread to cores : {:?}", &cores);
    // Output : "Binding thread to cores : [0, 2, 4, 6]"
    
    set_thread_affinity(&cores).unwrap();
    println!("Current thread affinity : {:?}", get_thread_affinity().unwrap());
    // Output : "Current thread affinity : [0, 2, 4, 6]"
}

完整的示例 在此

功能

  • 绑定到多个核心
  • 返回当前已绑定的核心列表
  • 可靠地获取核心数量(使用 num_cpus
  • 允许调用者处理错误
  • 支持Windows上新子进程的亲和力继承(通过 set_process_affinity()

平台

目前仅在以下平台测试

  • Windows
  • Linux (Arch x64)

许可证

贡献

除非你明确声明,否则根据Apache-2.0许可证定义的,你提交给作品包含的任何贡献都应双许可,如上所述,没有任何附加条款或条件。

依赖关系

~0–7MB
~41K SLoC