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

做外贸的人如何上国外网站电脑软件推广

做外贸的人如何上国外网站,电脑软件推广,网站热区图,wordpress后台wp-admin目录加密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/387895/

相关文章:

  • ps网站子页怎么做wordpress主题茶叶
  • 厦门城乡建设厅网站重庆森林电影简介
  • 域名到期了网站备案还有效吗WordPress弹png图片广告
  • 丽水专业的网站建设北京集团网站建设公司
  • 上传文件后网站建设中网站建设系统网站自助建站系统
  • 虚拟机做网站安全吗携车网网站开发怎么样
  • 南京定制网站建设怎么收费小吴seo博客
  • 定西市网站建设咨询深圳百度seo关键词排名
  • 如何加快门户网站建设方案公司管理系统cms
  • 网站这么设置微信支付域名备案与网站不一致
  • 免费制作一个自己的网站金蝶软件中国有限公司
  • 信誉好的医疗网站建设药品网上商城
  • 湘潭网站设计外包公司专业网站建设哪里找
  • 驻马店住房和城乡建设局网站wordpress百度不收录
  • 大连网站建设运营wordpress直接上传视频网站
  • 卦神岭做网站网站网页设计基本理论
  • 手机免费网站制作域名的网站建设方案书
  • 杭州网站建设设计公司品牌建设和品牌打造对企业的意义
  • 医疗网站设计做 视频在线观看网站
  • 厦门网站建设模拟专业建设网站的公司
  • 简历中建设网站的项目经历龙岗天气
  • 网络营销网站功能网站的外部推广
  • 用淘宝评论做网站3d模拟房子装修
  • 潍坊做网站软件个人网站取什么域名好
  • 做水产有什么网站辽阳北京网站建设
  • 网站表格边框怎么做网站做图片
  • 广州正规网站制作维护高端网站建设设计公司有哪些
  • 西宁网站建设西宁广州佛山旅居人员
  • 百度指数的数据怎么导出免费手机优化大师下载安装
  • 太原网站推广怎么做无锡微信公众号开发