夜不能寐意味着什么(计算机和操作系统中无处不在的同步和异步)
admin
2023-08-28 21:44:10

今天看了一本书《计算机底层》,里面详细阐述了系统底层同步和异步的处理方法。本文将讨论什么是同步,什么是异步,以及它们在编程中的意义。这是编写高性能、高并发代码的关键基础。

相信很多同学第一次接触同步和异步这两个词的时候都很疑惑。没错,这两个词其实看起来很像,曾经困扰过我,让我夜不能寐。这两个词到底是什么意思?

让我们来看看身边常见的一幕:

美好的一天从打卡开始,从此你成为。

苦逼程序员

假设老板现在给你安排了一个非常紧急的开发任务,让你下班前一定要搞出来(万恶的资本主义)。为了保证能完成任务,老板就坐在你旁边看着。

你心里一定有一万只羊驼匆匆而过:& quot* * *,这也太闲了。你为什么盯着老子看?你不能做点别的吗?"我怎样才能摸到鱼?"

老板似乎看穿了你的心思:& quot我会在这里等。在你写完之前,我哪儿也不去。不要急着用墨水。"

在上面的例子中,老板告诉你什么也不做,直到等待完成,同步。

第二天,老板给你布置了一项新任务:& quot这个年轻人的能力真不错。用不了多久,你就可以升职加薪,成为总经理,成为CEO,和白结婚,达到人生的巅峰。"别激动,加油,先完成今天的任务,别着急,完成了就告诉我一声。"

老板写完就回去刷Tik Tok,苦干四五个小时,你干脆编码完了:& quot老板,我做完了,过来看看。"

在这个例子中,老板做完安排会去做别的事情,你写完会告诉老板任务完成了,这属于异步概念。

异步和同步最明显的区别就是你的老板在你工作的时候在演话剧,这两件事是同时发生的,所以理论上来说,异步的效率要高于同步对于大部分场景都是这样的。

所以,所以,所以!如果真的遇到背后盯着代码的老板,那才是上策!

下面的场景对于理解同步和异步更加生动。

打电话vs发邮件

作为一个努力的程序员,不能只埋头搬砖。工作中你要和客户沟通,最常见的方式就是发个电报。啊,不,是个电话。

通常我们打电话,一个人说,另一个人听。当另一个人发言时,我们需要等待,然后在另一个人说完后我们会继续发言,每一步都是依赖.之前的发言这里的关键是等待是不可避免的,这是同步的特点。

作为砖家,另一种常见的方式是发邮件,尤其是在公司内部。没有人会无所事事地等待你的邮件。他可以摸鱼,给电池充电,上厕所等等。同样,发完邮件也不用等对方回复,在此期间还可以做其他有意义的事情。

这样,两件事同时发生:写邮件和钓收件人。双方都在不需要等待,而这两样东西在依赖.都不存在,这是一种异步方式。

编程中的同步

现在回到编程的话题,上面的场景说明了同步和异步在生活中的意义,那么在程序开发中如何理解呢?

一般情况下,函数是这样调用的。

functionA(){//等待函数B结束functionB()//稍后继续运行}函数A调用函数B,所以在B结束之前A不会执行后续代码,就像这样:

从上图可以看出,在B执行的过程中,A什么都不能做,这就是同步。

以下节点代码用于同步读取磁盘文件,属于阻塞I/O。

import { read file sync }来自“fs”;readFileSync(“目录”);//程序停止运行,等待I/O返回数据。//程序员最好在读完文件后继续运行同步编程。一步在下一步之前完成,但代价是这种方法在某些场景下(比如I/O操作)效率不够高,因为任务不能同时进行。

编程中的异步

有同步就有异步。了解了前面的内容,相信很快就能掌握异步的要领了。

一般来说,在程序开发中,有些耗时的任务是异步的,比如磁盘读写、网络数据收发、数据库命令执行等等。同样,以磁盘文件读取为例,即使文件还没有被完全读取,也可以使用异步函数来执行下面的代码。

从“fs”导入{ readFile };readFile('目录'回调);//readFile函数立即返回//不会阻塞程序的执行//在某个时间点文件读取完成后执行回调异步的关键点是调用函数后下一个程序可以在文件读取的同时继续执行,效率高。

但是异步执行对程序员来说是个负担,无论是读还是写都不太好理解。

有的同学可能会问,在同步的情况下,你可以得到函数的结果,继续执行。

那么异步的时候又怎么知道函数执行完成了呢?

这里一分为二:

不需要关心结果,执行就ok需要结果进行更多的操作

第一种无需讨论,比较简单。

第二种情况通常有两种方式,一种是通知机制,任务完成后发送信号通知上一级,例如linux的signal方式。还有一种就是回调,就是我们常说的callback。

最后需要注意的是,并非所有的情况下异步就一定比同步高效,还要结合具体的业务或者I/O复杂程度来分析。但是不管何时何地,同步意味着双方要相互等待,相互依赖,二异步则意味着双方相互独立,各行其道。希望这篇文章对大家理解这两个重要的概念有所帮助。

相关内容

热门资讯

金花创建房间/微信金花房卡怎么... 1.微信渠道:(荣耀联盟)大厅介绍:咨询房/卡添加微信:88355042 2.微信游戏中心:打开微...
金花房间卡/金花房卡如何购买/... 金花房间卡/金花房卡如何购买/新超圣金花房卡正版如何购买新超圣是一款非常受欢迎的游戏,咨询房/卡添加...
牛牛创建房间/金花房卡批发/神... 微信游戏中心:神牛大厅房卡在哪里买打开微信,添加客服【88355042】,进入游戏中心或相关小程序,...
链接牛牛/牛牛房卡游戏代理/鸿... 鸿运大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
科技实测!牛牛房卡怎么获得/乐... 微信游戏中心:乐酷大厅房卡在哪里买打开微信,添加客服【88355042】,进入游戏中心或相关小程序,...