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

建立个人网站流程深圳网站开发公司h5

建立个人网站流程,深圳网站开发公司h5,如何规范网站使用,网站开发的税率在实际开发过程中,我们可能会遇到并发写文件的场景,如果处理不当很可能出现文件内容乱序问题。下面我们通过一个示例程序描述这一过程并给出解决该问题的方法。 use std::{fs::{self, File, OpenOptions},io::{Write},sync::Arc,time::{SystemTime, UNI…

在实际开发过程中,我们可能会遇到并发写文件的场景,如果处理不当很可能出现文件内容乱序问题。下面我们通过一个示例程序描述这一过程并给出解决该问题的方法。

use std::{fs::{self, File, OpenOptions},io::{Write},sync::Arc,time::{SystemTime, UNIX_EPOCH},
};
use tokio::task::JoinSet;fn main() {println!("parallel write file!");let max_tasks = 200;let _ = fs::remove_file("/tmp/parallel");let file_ref = OpenOptions::new().create(true).write(true).append(true).open("/tmp/parallel").unwrap();let mut set: JoinSet<()> = JoinSet::new();let rt = tokio::runtime::Runtime::new().unwrap();rt.block_on(async {loop {while set.len() >= max_tasks {set.join_next().await;}未做写互斥函数let mut file_ref = OpenOptions::new().create(true).write(true).append(true).open("/tmp/parallel").unwrap();set.spawn(async move { write_line(&mut file_ref) });}});
}fn write_line(file: &mut File) {for i in 0..1000 {let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();let mut content = now.as_secs().to_string();content.push_str("_");content.push_str(&i.to_string());file.write_all(content.as_bytes()).unwrap();file.write_all("\n".as_bytes()).unwrap();file.write_all("\n".as_bytes()).unwrap();}
}

代码不复杂,tokio 实现一个并发runtime,写文件函数是直接写时间戳,为了方便展示乱序所以写入两次换行。

输出的文本大概长这样

1691287258_9791691287258_7931691287258_3011691287258_7431691287258_6031691287258_8941691287258_471691287258_895
1691287258_5531691287258_950
1691287258_9801691287258_48
1691287258_3021691287258_896
1691287258_7441691287258_6041691287258_554

很明显,写入并未达到预期,间隔并不平均,函数内部的执行步骤是乱序的。

我们把上面的程序改造一下

use std::{fs::{self, File, OpenOptions},io::Write,sync::Arc,time::{SystemTime, UNIX_EPOCH},
};
use tokio::sync::Mutex;
use tokio::task::JoinSet;fn main() {println!("parallel write file!");let max_tasks = 200;let _ = fs::remove_file("/tmp/parallel");let file_ref = OpenOptions::new().create(true).write(true).append(true).open("/tmp/parallel").unwrap();let f = Arc::new(Mutex::new(file_ref));let mut set: JoinSet<()> = JoinSet::new();let rt = tokio::runtime::Runtime::new().unwrap();rt.block_on(async {loop {while set.len() >= max_tasks {set.join_next().await;}let mut file = Arc::clone(&f);set.spawn(async move { write_line_mutex(&mut file).await });}});
}async fn write_line_mutex(mutex_file: &Arc<Mutex<File>>) {for i in 0..1000 {let mut f = mutex_file.lock().await;let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();let mut content = now.as_secs().to_string();content.push_str("_");content.push_str(&i.to_string());f.write_all(content.as_bytes()).unwrap();f.write_all("\n".as_bytes()).unwrap();f.write_all("\n".as_bytes()).unwrap();}
}

这次我们用到了tokio::sync::Mutex,write_line_mutex函数在每次执行写任务以前先获取文件互斥锁。

看看这次的文件内容

1691288040_3741691288040_3741691288040_3741691288040_3751691288040_3741691288040_3741691288040_3741691288040_3741691288040_3741691288040_3741691288040_3741691288040_3741691288040_3741691288040_3741691288040_3751691288040_3751691288040_3741691288040_3751691288040_3751691288040_3751691288040_3751691288040_3751691288040_3751691288040_3751691288040_3751691288040_3751691288040_375

写入的格式正确,保证每次函数写函数完整执行。

关于文件写互斥这点事儿,今儿就聊到这。

完整源码

作者:京东科技 贾世闻

来源:京东云开发者社区

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

相关文章:

  • 用php做网站难吗安卓app开发框架
  • 青岛网站建设青岛新思维建筑公司发展愿景
  • 班级网站主页设计模板福田网站建设费用明细
  • 北京网站建设解决方案深圳中装建设集团有限公司
  • 四川省建设厅官方网站三内人员重庆特种作业证件查询
  • 网站添加邮件发送怎么做视频剪辑线下培训班
  • 孝感网站的建设青岛城阳网站开发
  • 浙江台州网络设计网站辽宁省城乡建设厅网站
  • 做网站九州科技用什么工具做网站视图
  • 山东网站建设app雷州网站
  • 建网站没有公司地址怎么办营销型网站建设哪家便宜
  • 推广网站方案佛山网站设计联系方式
  • 如何利用网站开发客户合川网站建设
  • 怎么做网站动态框企业网站推广渠道有哪些
  • 官方网站建设制作平台汕头达濠
  • 怎么搞一个服务器建设网站网站建设初验申请表
  • 室内设计找工作网站彩票网站代理
  • 基于php网站建设设计南宁企业建站程序
  • 网站开发亿码酷流量网页设计与制作建立站点实践报告
  • 做网站自己能做百度推广吗在线设计的软件
  • 做企业网站需要招标公告上面的技术参数写什么网站伪静态规则
  • 云主机添加网站淄博手机网站建设公司
  • 什么是网站开发企业手机网站源码
  • 微信做商城网站网站支付功能建设
  • 荷塘网站建设网站开发7个基本流程
  • 如何在建设银行网站申购纪念币wordpress 增加相册
  • wordpress搜索功能优化做搜狗pc网站优化首
  • 南宁公司建站模板建设网站阿里云服务器
  • 做外贸都做哪些网站好免费室内设计专业网站
  • 怎么做自己的网站推广商品门户网站解决方案