这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 彻底理解异步编程!

共1条 1/1 1 跳转至

彻底理解异步编程!

高工
2024-06-26 11:44:48     打赏

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

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


void B() {  
   lines = read(filename);  
   sum(lines);
}
void A() {  
   ...  
   B();  
   ...
}
代码非常简单,B函数读取一个文件,文件里保存的是一行行数据,然后加和,A函数中的某个位置调用B函数。此时,我们说这是同步调用,因为A函数后续代码必须等待B函数处理完文件才能继续执行。随着业务不断发展,B函数处理的文件越来越庞大,此时处理一次文件耗时2小时,假设A函数后还有一行重要的代码:


void A() {  
    ...  
    B();  
    something_important();  
    ...
}
这就意味着调用B函数后需要等待2个小时才能执行到something_important这行代码,而something_important函数对时间要求非常苛刻,该怎样改进呢?其实很简单,我们可以在B函数内部创建一个线程,在线程中处理文件:


void handle_file() {  
   lines = read(filename);  
   sum(lines);
}
void B() {  
   thread t(handle_file);
}
void A() {  
   ...  
   B();  
   something_important();  
   ...
}
这样B函数被调用后创建完线程即可立即返回,紧接着开始执行something_important这行代码,CPU在执行something_important这行代码时可能文件还没有开始处理,这样函数A不再依赖于文件处理,这时我们说函数B函数就是异步调用的,函数A异步于文件处理。如果是在单核系统下,CPU会不断在处理文件线程和A函数线程间切换,看上去这两个线程就好像在同时运行,但如果是在多核系统下,这两个线程可以真正的并行起来。在编程语境下,异步往往和线程进程等相关。





关键词: 异步     编程     理解    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]