我们已经知道了同步的基本定义和一些示例,那么让我们拓宽一-下讨论,看看应用中的同步调用和异步调用。同步调用是在调用返回时才能完全执行它们的动作。如果一个方法被调用了,控制权被转给该方法来行使,那么只有当该方法完成了自己要执行的操作,成功地返回了或者返回有错时,应用中调用该方法的地方才会重新得到控制权。换而言之,同步方法先被调用,然后它们执行操作,当它们完成时,会返还控制权。
作为同步方法的一个示例,让我们来看看AllScale公司的HRM服务中的一个方法query_ exec。该方法用于构建和执行一个动态的数据库查询。query_ exec方法中的一个步骤是建立一一个数据库连接。在得到这个数据库连接任务成功完成了的明确确认之前,query. exec方法不会继续执行。这样做既浪费资源,又浪费时间。如果数据库不可用,那么该应用就不应该把时间浪费在创建查询、等待数据库恢复可用上。事实上,如果数据库不可用了,,看看如何划分数据库来提高它的可用性。尽管如此,这是个说明同步调用是 如何工作的例子。因此,发起调用的方法会被暂停,直到被调用的进程返回结果之前,它是不能完成的。
另一个说明同步性的非技术示例是两个人之间的沟通,这可以是面对面,也可以是通过电话。如果这两个人都忙于有意义的谈话,那么就不太可能发生其他的动作。其中一人如果不停止与另一人的谈话,那么很难再与第三个人开始交谈。电话会直占线,直到两个人中的一个或者两者挂断了电话。
与同步方法或进程相对的是异步方法。在异步方法调用中,会在一个新的线程中调用一个方法,这个方法会立即把控制权返回给调用它的线程。描述异步方法调用的设计模式叫作异步设计或异步方法调用(AMI)。这个异步调用的方法会在另一个线程中继续执行,或成功结束或出现错误,但都不会再与发起它的线程有进一步的交互。 让我们再来看看AllScale公司的query exec方法。在调用了同步方法,建立数据库连接后,该方法需要准备和执行查询了。在HRM系统中,AllScale公司有一个监控框架,能够用来观察所有查询的持续时间以及查询是否成功了,这个框架采用了异步调用方法start query_ time和end query time。这些方法会把一个系统时间存储在内存中,等待调用的结束,以便计算查询的持续时间。然后这个持续时间会被存储在一个监控数据
库中,通过查询这个数据库,可以根据查询运行时间的长短了解系统运行状况如何。虽然监控查询的性能很重要,但让查询真正服务于用户的请求更为重要。因此,start query time和lend query_time这些方法是以异步模式调用的。如果它们运行成功并返回了结果,那么AllScale公司的运营团队和软件开发团队就能从监控数据库中得到查询时间。即使监控调用失败了,或者连接监控数据库花了20秒的时间,这些团队都不会在乎。用户的查询仍然在运行,它们根本不关心这些异步调用。
回到我们人际沟通的示例,电子邮件是个异步通信的很好例子。你写了电子邮件并把它发出去后,可以立即去做其他的事情,可以写另一封邮件, 也可以打一轮高尔夫球或者其他什么事情。当回复的邮件在一个合适的时候到达时,你可以阅读这封回复的邮件,并可能发出另一封邮件,作为回复。这个
网站设计的沟通链除了需要为处理沟通和写回信花费点时间之外,不会妨碍发送者和接收者的任何其他活动。
网页名称:网站设计中同步调用,还是异步调用?
URL标题:/news/150648.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有网站设计等
广告
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源:
创新互联