当前位置: 首页 > news >正文

福州网站建设seo中企动力重庆分公司

福州网站建设seo,中企动力重庆分公司,wordpress 分类菜单,长岛网站建设tokio 是 rust 生态中流行的异步运行时框架。在实际生产中我们如果希望 tokio 应用程序与特定的 cpu core 绑定该怎么处理呢?这次我们来聊聊这个话题。 首先我们先写一段简单的多任务程序。 use tokio::runtime; pub fn main() {let rt runtime::Builder::new_mu…

tokio 是 rust 生态中流行的异步运行时框架。在实际生产中我们如果希望 tokio 应用程序与特定的 cpu core 绑定该怎么处理呢?这次我们来聊聊这个话题。

首先我们先写一段简单的多任务程序。

use tokio::runtime;
pub fn main() {let rt = runtime::Builder::new_multi_thread().enable_all().build().unwrap();rt.block_on(async {for i in 0..8 {println!("num {}", i);tokio::spawn(async move {loop {let mut sum: i32 = 0;for i in 0..100000000 {sum = sum.overflowing_add(i).0;}println!("sum {}", sum);}});}});
}

程序非常简单,首先构造一个 tokio runtime 环境,然后派生多个 tokio 并发,每个并发执行一个无限循环做 overflowing_add。overflowing_add 函数返回一个加法的元组以及一个表示是否会发生算术溢出的布尔值。如果会发生溢出,那么将返回包装好的值。然后取元祖的第一个元素打印。

这个程序运行在 Ubuntu 20 OS,4 core cpu。通过 nmon 的监控如下:

可以看到每个 core 都有负载。

要想把负载绑定在某一 core 上,需要使用 core_affinity_rs。core_affinity_rs 是一个用于管理 CPU 亲和力的 Rust crate。目前支持 Linux、Mac OSX 和 Windows。官方宣称支持多平台,本人只做了 linux 操作系统的测试。

我们把代码修改一下:

use tokio::runtime;pub fn main() {let core_ids = core_affinity::get_core_ids().unwrap();println!("core num {}", core_ids.len());let core_id = core_ids[1];let rt = runtime::Builder::new_multi_thread().on_thread_start(move || {core_affinity::set_for_current(core_id.clone());}).enable_all().build().unwrap();rt.block_on(async {for i in 0..8 {println!("num {}", i);tokio::spawn(async move { loop {let mut sum: i32 = 0;for i in 0..100000000 {sum = sum.overflowing_add(i).0;}println!("sum {}", sum);           }});}});
}

在构建多线程 runtime 时,在 on_thread_start 设置 cpu 亲和。可以看到负载被绑定到了指定的 core 上。

上面的代码只是把负载绑定到了一个 core 上,那么要绑定多个核怎么办呢?
我们看看下面的代码

pub fn main() {let core_ids = core_affinity::get_core_ids().unwrap();println!("core num {}", core_ids.len());let rt = runtime::Builder::new_multi_thread().enable_all().build().unwrap();let mut idx = 2;rt.block_on(async {for i in 0..8 {println!("num {}", i);let core_id = core_ids[idx];if idx.eq(&(core_ids.len() - 1)) {idx = 2;} else {idx += 1;}tokio::spawn(async move {let res = core_affinity::set_for_current(core_id);println!("{}", res);loop {let mut sum: i32 = 0;for i in 0..100000000 {sum = sum.overflowing_add(i).0;}println!("sum {}", sum);}});}});
}

代码需要把所有负载绑在 core3 和 core4 上。原理是在派生任务中加入 core_affinity 设置。通过调整 idx,将派生并发平均绑定在指定的 core 上。代码运行的监控如下图。

http://www.yayakq.cn/news/432937/

相关文章:

  • 手机移动端网站wordpress 系统安装教程 pdf
  • 企石网站仿做wordpress怎么中文
  • 建网站打开需要验证建设项目所在地公共媒体网站
  • 阿里云 部署网站网上购物的网站开发背景
  • 自己做网站不如帮别人做运营WordPress文章中的编辑去掉
  • 做网站录入和查询需求wordpress文章页面宽度
  • 58同城的网站建设郓城网站建设
  • 湖南微网站营销常用十大浏览器
  • 台州网站建设多少钱网站标题写什么作用
  • 中国建设银行绑定网站wordpress 音乐主题
  • 西安网站seo分析湖南省建设信息网站
  • 商城网站开发报精准营销
  • 网站建设vrhtml设计个人网页
  • 自驾游网站建设加盟网站有哪些
  • 网站空间续费多少钱跨专业的简历怎么制作
  • 做好的网站怎么优化小程序模板源码免费下载
  • 软件下载网站如何履行安全管理义务确保提供的软件不含恶意程序不用收费的软件
  • 做底单的网站平潭综合实验区交通与建设网站
  • 域名购买网站有哪些问题wordpress自定义菜单的输出
  • cdr做网站分辨率有什么好的书写网站
  • 手机网站自助建站源码扶余手机网站开发公司
  • 北京网站制作培训微官网怎么进入
  • 网站建设的流程范文1500字深圳人才网招聘官方网
  • 做网站装什么服务器seo关键词排名优化软件
  • 怎么在手机上制作网站吗微信网站对接
  • 网站网页设计尺寸什么是品牌型网站
  • 营销型网站建设评价长沙网络推广袁飞seo
  • 无极平台网站建筑企业管理咨询公司是做什么的
  • 工会网站群建设方案甘肃酒泉建设银行网站
  • 西青做网站公司网站建设项目书