SEARCH
新闻资讯

网站知识库

网站制作同步扩展,照旧异步扩展?

2020/3/12 12:03:59

如今我们理解了同步调用和异步调用之间的区别。为什么要了解它们呢?答案在可扩展性当中。假如过度使用同步调用,或者使用不当,会给体系造成过度的负担,妨碍它扩展。让我们维续使用那个query exec的例子,尝试实行一个用户查询。假如根据以下理由,即(1)监控很紧张,(2)监控方式运行得很快,(3)最坏的情况不过是用户查询变慢了,我们实现了两个同步调用的监控方式。这些理由虽然意图是好的,但它们却是错误的。如前所述,虽然监控很紧张,但是也没有返回给用户的查询效果紧张。当被监控的数据库在运行时,监控方式大概运行得很快,但是当发生了硬件故障,或者被监控数据库不能访问时,又会怎样呢?这样来,监控查询就会被堆积起来,等待超时。



这也就意味着用户的查询会被壅塞,等待监控查询完成,从而导致用户查询堆积起来。当用户查询变慢或者临时制止等待超时时,它仍然会占用一个用户数据库的数据库连接,而且应用服务器上实行的线程依然会消费服务器上的内存。随着越来越多的用户线程开始制止,等待它们的监控调用超时,用户数据的连接数可能会被耗尽,这样其他非监控类的查询就不能再连接到用户数据库上。并且应用服务器上的线程必须要把数据写回硬盘来释放内存,这样就会造成服务器上的内存交换。这种交换会使所有的处理变慢,还可能会使应用服务器的TCP堆栈达到上限,以致拒绝之后的连接。最后,新的用户请求将得不到处理,用户只能坐等欣赏器或应用超时。从本质上来说,你的应用或平台已经制止工作了。如你所见,究竟是采用同步调用照旧异步调用,这样-一个小疏忽就会轻松地造成一系列糟糕的事件。 这个场景当中最精糕的一点在于,造成问题的根本缘故原由很潜伏。因为我们是渐渐探究了这一系列事件,所以要理解问题所在相对比较容易,但假如体系的症状体现为体系载人Web页面开始变慢,在接下来的15分钟内,这种情况越来越紧张,直到最后整个体系制止了运行,要诊断这个问题是特别很是困难的。或许你有充足的监控信息来帮助你诊断这些类型的问题,但是当你的站点停机了,而你又急于让它恢复服务时,要搞清楚这一系列事件的原形是倍有压力的。
 
尽管使用同步调用不当或过度会造成问题,但方式调用照旧常常采用同步方法实现。为什么会这样?答案在于,同步调用比异步调用简单。你或许会增补说,“等等,同步调用的确更简单一些,不过更经常情况的是,我们的某些方式必须要其他的方式先被调用才能成功完成。因此,我们不能在体系中使用大量的异步调用”。是的,的确如此。很多时候,你的确必须要等待被调用的方式完成,并必须要知道某些状况才能让线程继承运行。我们不是要告诉你所有的同步调用都不好,事实上,很多同步调用都是必需的,它们会让开发人员的日子简单得多。但也有很多时候,即使存在上述的依靠性,也是可以使用异步调用,并且应该使用异步调用来代替同步调用的。假如主线程不太关心被调用的线程是否完成了,例如监控调用,那么只需用一个简单的异步调用即可。假如你必须要被调用的线程提供一些信息, 又不想妨碍主线程的实行,那么可以采用回调来获取这些信息。关于回调的细致介绍已经不在本书的范围之内了。回调功能的一个示例是,操作体系中用于报告硬件状态的停止处理例程。
 
异步和谐
 
原方式与被调用的方式之间的异步和谐和通讯必须要一种机制,以便原方式确认被调用的方式何时实行完毕或者是否实行完毕了。回调是一种方式,它们会以参数的情势传递给其他方式,
 
以便去除代码中不同层之间的耦合。在C和C+中,这是通过函数指针实现的;在Java中, 则是通过对象引用实现的。有很多设计模式都使用了回调,例如委托设计模式和观察者设计模式。高层的进程会充当低层的客户,通过传递引用来调用低层的方式。一个回调方式被调用的示例可以是像文件体系改变这样的同步事件。
 
在.NET框架中,异步通讯的特性是使用了BeginBlah,其中Blah就是该方式的同步版本的名字。判断一个异步调用是否完成了的方式有四种:
 
第一种是轮询(IsCompleted属性);
 
第二种是回调方式Delegate;
 
第三种是方式AsyncWaitHandle,等待调用完成;第四种是方式EndBlah,也是等待调用完成。
 
不同的语言提供了不同的方案来解决异步通讯和和谐问题。你必须要了解你的语言和框架提供了什么解决方案,这样才能在必须要的时候实现它们。
 
在上段中我们说过网站制作同步调用简单,因此使用同步调用的情况比使用异步调用的I彩得名。虽然这是事实,但它只是工程师忽视了同步调用的影响的部分缘故原由。另部分缘故原由是开发人员通常只看到小部分。在一个组织中,只有特别很是少的几个人能够览应用的全貌。你的架构师一定应该他看到个局的应川,同样地,管理团队应该也可以看到。你必须寄托他们来解决难题,并诠释同步调川会造成哪些扩展问题。





如没特殊注明,文章均为成都网站建设公司唯赛网络原创,转载请注明来自http://www.weseo.cn/News/knowledge_675_11293.html

Contact

ADD:成都市青羊区光华东三路西环广场6楼

TEL:028-64232097

Wechat

微信二维码