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

古云网站建设wordpress付费查看插件

古云网站建设,wordpress付费查看插件,,建设工程知识类网站在实际开发过程中#xff0c;我们可能会遇到并发写文件的场景#xff0c;如果处理不当很可能出现文件内容乱序问题。下面我们通过一个示例程序描述这一过程并给出解决该问题的方法。 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: ArcMutexFile) {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::Mutexwrite_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://wiki.neutronadmin.com/news/144411/

相关文章:

  • 网站 黑白竞价推广托管公司介绍
  • 松江做网站的公司wordpress不能自定义
  • 德州网站建设视频不可添加橱窗入口
  • soho建网站 必须先注册公司吗公司的网站建设费入什么科目
  • 如何免费制作一个网站wordpress sql 注入
  • 网站开发 wenzhou建站推荐
  • 建站快车代理平台系统大良网站设计价位
  • 销售推广案例网站岑溪网络推广营销
  • 个人宽带备案网站百货店怎么做网站送货
  • 新开传奇网站发布站文章网站模板哪个好
  • 宁波网站设计公司哪个好河南城乡和住房建设厅网站
  • 重庆网站建设技术外包wordpress修改 版权
  • 去哪个网站做农产品推广网站建设wuhan
  • 企业网站优化的方式商务网站策划书
  • 建设博客网站步骤合肥市建设局
  • 想发布oa网站 需要备案吗wordpress腾讯cos
  • 网站建设实训进程计划中信建设有限责任公司 乔锋 电话
  • 如何做漂亮的网站莆田网站建设制作
  • 做淘宝客网站需要什么要求江西省网站建设
  • 企业网站推广优化公司网络营销的发展趋势
  • 中小型企业网站优化推广建立网站的原因
  • 重庆响应式网站建设哪家有上海品牌logo设计公司
  • 上线了建的网站免费吗站酷网设计素材
  • 中国建设银行网站怎么改支付密码是什么将wordpress 搭建成一个公众网页
  • 帮企业外卖网站做推做利基网站用备案
  • 交三百能在网站上找兼职做的响应式网页设计方法
  • 哈尔滨网站制作维护九江有哪些免费推广网站
  • 陕西建设银行网站食品网站的功能定位
  • 滁州建设厅网站傻瓜式网站开发
  • 企业门户网站建设方案后台管理江岸区网站公司