< 返回版块

rdigua 发表于 2020-11-15 02:22

试了下thread::spawn 有个疑问

fn main(){

//...
//...
//...

    for i in vv.iter(){
        key+=1;
        if i.is_empty(){
            continue
        }
        let new_file = "./files/".to_owned() + &name.to_owned() + &key.to_string() + ".sgf";
        let mut s:String="(;".to_string();
        s.push_str(i);

         let f_run=thread::spawn(move || {

            save_file(new_file,s);


        });
        v_thread.push(f_run);

    }

    for child in v_thread{
        child.join();
    }

    println!("{}", now.elapsed().as_secs());
}

fn save_file<P: AsRef<Path>>(path: P,s:String)->Result<String,E>{
     //println!("{}",path.as_ref().display());
    let  f = File::create(path);
    match f{
        Ok(mut ff)=>{
            if s.is_empty(){
                println!("file is not empty.");
                return Err("file is not empty.".to_string());
            }
           println!("{:#?}",ff.write_all(s.as_bytes()));
           // ff.write_all(s.as_bytes());
            println!("{:#?}", ff.sync_data());
            //ff.sync_data();
        }
        _=> return Err("Is is some error, do not write file.".to_string())
    }

save_file 函数里 如果采用

           println!("{:#?}",ff.write_all(s.as_bytes()));
           println!("{:#?}", ff.sync_data());

这两句 大约需要5秒

而直接采用

ff.write_all(s.as_bytes());
ff.sync_data();

同样的两句不打印 需要15、6秒 反而慢

感觉有点神奇 为什么呢

补充一下: 以上都是用 cargo run .. 得出的结果 而build --release 之后反而更慢 神奇的rust

先怀疑一下自己肯定哪里写的不对

评论区

写评论
作者 rdigua 2020-11-15 14:38

特意切换到 ubuntu的机器上 秒完 快了不知道多少倍 用时 265800828 纳秒 ... 看来是windows io管理上事 不管啦 .....

作者 rdigua 2020-11-15 14:21

谢谢答复 都是在windows10下的powershell里面比较的 问题在于print 比 不print要快

--
👇
zhuxiujia: print和控制台程序的效率有关系的啊,比如你在Idea或者Clion里面debug,控制台程序是idea的java实现的。如果你在windows系统命令行执行cargo run --release ,控制台程序是win系统实现的。效率铁定不一样。。。

zhuxiujia 2020-11-15 14:05

print和控制台程序的效率有关系的啊,比如你在Idea或者Clion里面debug,控制台程序是idea的java实现的。如果你在windows系统命令行执行cargo run --release ,控制台程序是win系统实现的。效率铁定不一样。。。

1 共 3 条评论, 1 页