当前位置: 首页 > 科技观察

什么是异步编程?

时间:2023-03-21 12:04:21 科技观察

大家好,我是小风哥。可能有同学发现最近更新频率有点慢。小风哥确实是工作之余忙着别的事情。暂时先保密吧,过段时间我把照片报给大家。之前有很多同学在微信上问能不能聊聊异步编程。今天,就这个话题和大家简单聊聊。我们以函数调用为例,假设有这样的代码:voidB(){lines=read(filename);sum(lines);}voidA(){...B();...}代码很简单,B函数读取一个文件,将文件中的数据逐行存入,然后汇总,在A函数的某个位置调用B函数。这时候我们说这是一个同步调用,因为函数A后面的代码必须要等函数B处理完文件后才能继续执行。随着业务的不断发展,B功能处理的文件越来越大。此时处理一个文件需要2个小时。假设A函数后面有一行重要的代码:voidA(){...B();something_important();...}这意味着在调用B函数之后执行something_important这行代码需要2个小时功能,而something_important功能对时间要求很高。在内部创建一个线程来处理线程中的文件:voidhandle_file(){lines=read(filename);sum(lines);}voidB(){threadt(handle_file);}voidA(){...B();something_important();...}这样,函数B被调用后,可以在创建线程后立即返回,然后开始执行something_important这行代码。当CPU执行到something_important这行代码时,文件可能还没有开始处理,所以函数A不再依赖于文件处理,这时候我们说函数B是异步调用的,函数A异步处理文件。如果是单核系统,CPU会不停地在文件处理线程和A函数线程之间切换。看起来这两个线程是同时运行的,但是如果是多核系统,这两个线程是可以真正并行的。起来。在编程语境中,异步往往与线程进程等相关。最后一个例子。同步就像是在自助售票机上排队取电影票(小风哥已经很久很久没去电影院看电影了),你要排队等待前一个人取完电影票才可以到你,你不能在前一个取票在自己取票的过程中,我们说你和前一个人在取票的时候是同步的上电影票。而异步就像去吃一顿大餐。您在座位上阅读菜单并点餐,其他人也可以点餐。在下订单之前,您无需等待其他人吃完饭。这时候我们说你点餐和别人一起吃饭是异步的。本文转载自微信公众号《码农的荒岛求生》,可通过以下二维码关注。转载本文请联系码农荒岛求生公众号。