异步编程到底在说啥?

开发 前端
如果是在单核系统下,CPU会不断在处理文件线程和A函数线程间切换,看上去这两个线程就好像在同时运行,但如果是在多核系统下,这两个线程可以真正的并行起来。

[[432994]]

大家好,我是小风哥。

有的同学可能注意到了最近更新频率有点慢,除了工作外小风哥也确实在忙些其它事情,这里先卖个关子,过段时间会和大家汇报的图片。

之前很多同学在微信上问能不能讲讲异步编程是怎么一回事儿,今天就和大家简单聊一聊这个话题。

我们以函数调用为例,假设有这样的代码:

  1. void B() { 
  2.   lines = read(filename); 
  3.   sum(lines); 
  4.  
  5. void A() { 
  6.   ... 
  7.   B(); 
  8.   ... 

代码非常简单,B函数读取一个文件,文件里保存的是一行行数据,然后加和,A函数中的某个位置调用B函数。

此时,我们说这是同步调用,因为A函数后续代码必须等待B函数处理完文件才能继续执行。

随着业务不断发展,B函数处理的文件越来越庞大,此时处理一次文件耗时2小时,假设A函数后还有一行重要的代码:

  1. void A() { 
  2.   ... 
  3.   B(); 
  4.   something_important(); 
  5.   ... 

这就意味着调用B函数后需要等待2个小时才能执行到something_important这行代码,而something_important函数对时间要求非常苛刻,该怎样改进呢?

其实很简单,我们可以在B函数内部创建一个线程,在线程中处理文件:

  1. void handle_file() { 
  2.   lines = read(filename); 
  3.   sum(lines); 
  4.  
  5. void B() { 
  6.   thread t(handle_file); 
  7.  
  8. void A() { 
  9.   ... 
  10.   B(); 
  11.   something_important(); 
  12.   ... 

这样B函数被调用后创建完线程即可立即返回,紧接着开始执行something_important这行代码,CPU在执行something_important这行代码时可能文件还没有开始处理,这样函数A不再依赖于文件处理,这时我们说函数B函数就是异步调用的,函数A异步于文件处理。

如果是在单核系统下,CPU会不断在处理文件线程和A函数线程间切换,看上去这两个线程就好像在同时运行,但如果是在多核系统下,这两个线程可以真正的并行起来。

在编程语境下,异步往往和线程进程等相关。

最后举一个例子。

同步就好比你排队去自助售票机取电影票(话说小风哥已经很久很久没有去电影院看电影了),你必须排队等待前一个人取完电影票才能到你,你不能在前一个取票的过程中取自己的票,这时我们说取电影票时你和前一个人是同步的。

而异步就好比去吃大餐,你在座位上看菜单点菜,其它人也可以点菜,你不需要等待其它人吃完饭才能下单,这时我们说你点菜和其它人吃饭是异步的。

本文转载自微信公众号「码农的荒岛求生」,可以通过以下二维码关注。转载本文请联系码农的荒岛求生公众号。

 

责任编辑:武晓燕 来源: 码农的荒岛求生
相关推荐

2021-01-27 05:25:44

Go语言函数

2020-11-27 19:08:51

AI 数据人工智能

2022-04-19 15:33:53

数据模型

2024-11-05 09:32:47

2017-03-16 14:31:11

2015-06-30 14:33:52

物联网

2015-09-02 09:56:33

大数据

2016-04-05 10:21:25

大数据元数据数据分析

2019-07-17 10:10:34

Netty版本Event

2023-06-11 17:02:24

数字化转型数字经济

2013-04-01 15:38:54

异步编程异步编程模型

2010-08-09 09:09:36

Linux与BSD的区

2021-11-16 23:07:59

手机性能技术

2020-11-02 12:47:56

性能优化

2020-03-09 16:43:06

脚本语言浏览器JavaScript

2019-05-28 09:19:57

5G华为美国

2020-10-08 14:45:36

Windows XPWindows微软

2023-09-12 16:36:39

操作系统CPU周期性

2012-04-27 10:13:08

云计算数据IaaS

2015-08-26 08:41:19

物联网
点赞
收藏

51CTO技术栈公众号