同步-异步思考

同步: 一件事情执行结束后, 才能执行下一件事. 

1. 只有一个线程: 

 2. 有两个线程:

 

上面两个模型都是在执行任务 2 的时候, 不会执行任务 3, 等任务 2 执行结束的时候才执行任务 3
伪代码:
main() {
  定义变量 a = 1;
  a = await get_number_two();
  打印 a 的值;
}
async get_number_two() {   sleep_s(
10); // 睡眠 10 s   return 2; } 结果: a 的值为 2.

 

异步: 干一件事的时候可以同时干另外一件事.

有点像一个人在用电饭煲煮米饭, 米饭放进去以后, 人就可以去干其他事, 当电饭煲发出滴的一声, 人就知道米饭熟了, 然后可以来处理煮熟的米饭. 

但是我们在代码中如何知道异步中的代码什么时候执行结束呢(米饭什么时候煮熟呢)? 我又如何在异步代码结束以后, 进行下一步处理呢?
答案是回调函数: 我们假设现在有这样一种情况, 我们需要读取一个大文件(读取文件的过程大概需要 3 分钟.), 大文件读取进内存后, 对其中的字符串进行处理. 

// 定义一个读取文件的异步函数,它接收文件名和回调函数作为参数

function readFileAsync(filename, callback) {

  // 模拟异步读取文件操作

  setTimeout(() => { const fileContent = "This is the content of the file.";

  // 假设这是从文件读取的内容

  callback(fileContent);

  // 调用回调函数,并将文件内容作为参数传给它

  }, 1000);

  // 假设文件读取操作耗时1秒

}

 

 

// 定义了一个回调函数用于处理文件内容

function processFileContent(content) {

  console.log("Processing file content:", content);

}

 

// 调用readFileAsync函数,读取文件,并指定processFileContent作为回调函数

readFileAsync("example.txt", processFileContent);

 

posted on 2024-03-19 13:23  书源  阅读(3)  评论(0编辑  收藏  举报

导航