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

网站被挂马原因上海seo优化公司

网站被挂马原因,上海seo优化公司,个人博客ui设计,网站必须做可信认证吗目录 前言 Fork和Join 前言 本节会介绍Rust中的并发编程,并发编程在编程中是提升cpu使用率的一大利器,通过多线程技术提升效率,Rust的并发和其他编程语言的并发不同的地方在于,Rust号称无畏并发。更重要的一点是安全。Rust中所有…

目录

前言

Fork和Join


前言

本节会介绍Rust中的并发编程,并发编程在编程中是提升cpu使用率的一大利器,通过多线程技术提升效率,Rust的并发和其他编程语言的并发不同的地方在于,Rust号称无畏并发。更重要的一点是安全。Rust中所有权机制依然存在于多线程当中。

本节会介绍Rust中并发编程的三种方式

1.Fork和Join

2.通道

3.共享可变状态

我们一个一个来看

Fork和Join

Fork和Join在编程语言中是一种比较常见的并发模式,Fork的意思就是新开线程,Join的意思就是等待线程的结果,这是非常通用的做法,只要任务可以切分,使用Fork和Join的方式往往都会取得比较好的结果。

我们以一个简单的例子来说明,将一个String类型的vector中的元素分别计算字符串的长度,如果串型来做,就for循环vec,分别计算元素的长度,我们使用Fork和Join来实现一下。

下面的代码中,定义了5个元素的vec,在计算前还定义了一个JoinHandle的vec,然后我们循环data,使用的into_iter()表示将元素的所有权转移给迭代器,在for循环内部,使用thread::spawn启动线程,线程执行的任务使用闭包表示,比较特殊的是在闭包的开头,新增了move关键字,这是为了将所有权转移到闭包内,在这里就是循环中的变量ss,最后一个for循环,使用join等待线程执行结束。

use std::collections::HashSet;
use std::sync::Arc;
use std::thread;
use std::thread::JoinHandle;fn main() {let data: Vec<String> = vec![String::from("hello"),String::from("rust"),String::from("flink"),String::from("kafka"),String::from("hadoop"),];let mut thread_handles: Vec<JoinHandle<()>> = vec![];for ss in data.into_iter() {thread_handles.push(thread::spawn(move || {println!("{} length = {}", ss, ss.len());}));}for handle in thread_handles {handle.join().unwrap();}
}

在上面的基础上,我们加上一个小需求来感受一下,Rust的并发安全问题,我们定义一个黑词vec,当处理的词语出现在黑词中时,做特殊输出。如果是别的编程语言,非常简单,只需要让线程读取一个HashSet即可,因为只读,但是在Rust中不行,为什么呢?假设存在这样的一个HashSet,存储黑词,在主线程中定义,那么当所有者离开作用域后,HashSet会被清理,此时如果子线程依然还在读这个HashSet,就会造成问题。那么在Rust中如何解决呢?在Rust中,智能指针Arc允许一个值存在多个所有者,是一个特殊情况,当最后一个所有者离开作用域后,这块内存才会被回收。

下面代码实现了上面的功能,使用了Arc共享了所有者。下面的代码中,我们定义HashSet,并且使用Arc使这个HashSet变成可以共享所有者。并在在每个线程中都有一个变量是所有者,保证了线程读到的HashSet一定是有效的。

use std::collections::HashSet;
use std::sync::Arc;
use std::thread;
use std::thread::JoinHandle;fn main() {let data: Vec<String> = vec![String::from("hello"),String::from("rust"),String::from("flink"),String::from("kafka"),String::from("hadoop"),];let mut black_words: HashSet<String> = HashSet::new();black_words.insert(String::from("kafka"));let black_words_arc: Arc<HashSet<String>> = Arc::new(black_words);let mut thread_handles: Vec<JoinHandle<()>> = vec![];for ss in data.into_iter() {let black_word_temp_arc = Arc::clone(&black_words_arc);thread_handles.push(thread::spawn(move || {if !black_word_temp_arc.contains(&ss) {println!("{} length = {}", ss, ss.len());} else {println!("black_word")}}));}for handle in thread_handles {handle.join().unwrap();}
}

http://www.hkea.cn/news/42961/

相关文章:

  • 宁波俄语网站建设免费发广告的平台有哪些
  • 郑州外贸网站建设及维护营销软件商城
  • 泉州百度关键词排名广州网站营销优化qq
  • 怎么做wep网站营销推广活动方案
  • 展示型网站php官方app下载安装
  • 嘉祥网站建设广东省自然资源厅
  • 忘记网站后台密码网站排名软件推荐
  • 怎么查公司网站有没有被收录火爆产品的推广文案
  • 绵阳网站建设 经开区网络教学平台
  • wordpress阅读量没改7个湖北seo网站推广策略
  • 网站建设成功案例方案找培训机构的平台
  • 园林绿化网站建设百度关键词优化公司
  • 个人如何建设网站网络营销方式有哪些分类
  • 北京做百度网站建设电商平台如何推广运营
  • 电脑个人网站怎么做网络销售新手入门
  • 海口网站建设 小黄网络手机百度搜索
  • 太原百度网站建设网站应该如何进行优化
  • 烟台市做网站uc浏览网页版进入
  • 工程信息网站哪家做的较好提高工作效率心得体会
  • 建站平台入口徐州网站设计
  • 出口手工艺品网站建设方案站长统计app下载
  • 提升学历骗局武汉搜索引擎排名优化
  • wordpress+park主题上海全国关键词排名优化
  • 潍坊最早做网站的公司短链接生成网址
  • 东莞化工网站建设爱站网ip反域名查询
  • 做网站赚钱 2017哈尔滨关键词排名工具
  • 建设的网站首页微信怎么做推广
  • 建设网站导航百度信息流推广和搜索推广
  • 深圳室内设计公司招聘信息流广告优化
  • 旅游网站首页四种营销模式