异步io
背景:
随着存储计算分离的项目进一步推进,IO异步成为了一件必须要做的事情了。随着存储内容分发到远端集中存储(盘古集群),IO lateny平均也需要300-400us,更不用说对于长尾访问,网络抖动,IO集中的情况,有时IO Latency可达到1ms。IO异步化是我们改进延时的一种方式。
实现过程:
总体采用的异步回调的方式,但是由于应用层,与底层存储用的并不是相同线程池,这个过程意味着多次线程切换。同时呢,为了防止“异步地狱”等问题,我们也自己封装了promise和future,使得回调逻辑可以看得更加清楚。
一些问题:
在调用异步回调的函数中,对于很多栈变量的生命周期都不好把控,暂时是通过ptr承接栈变量,控制好变量的生命周期,但是之前很多小的栈变量都通过new的方式产生,对性能必然有些影响。
同步接口的实现,是否通过异步wait来实现。如果不通过异步来实现,同时保留两套接口,那么代码可读性和可维护性就会差很多。但是用异步实现同步,可能会造成死锁的问题。同时同步也可能会有性能的下降,对于全内存等场景,其实是不可接受的。
异步IO之后,底层IO吞吐上去了,但是不可避免的IOdepth也上去了,也造成了单次IO Latency延时的增长。尽管总延时会有下降。但是延时和吞吐都好,才是最好的。
除了这些之外,总体来说,要上上下下改好多接口呀。。。
相关阅读
异步初步了解: 今天学es6中碰到关于异步(Asynchronous)的问题,然后觉得听到异步这个词自己知道是个什么意思,但是如果要自己用代码解释
普通方法调用,Invoke,begininvoke三者的区别总结及异步
(1)普通方法调用(直接调用)与Invoke()方法调用方法 使用的线程Id是一样的 即属于同步。(2)BeginInvoke(<输入和输出变量>,AsyncCallback ca
有一天,你找到公司刚来的程序员小 T,跟他说:“我们要加个需求,你放下手里的事情优先支持,我会一直等你做完再离开”。小 T 微笑着答应
ajaxfileupload.js异步上传文件插件(完整demo)
ajaxfileupload.js异步上传文件插件 HTML: <input type="file" accept="image/gif,image/jpeg,image/jpg,image/png,image/svg"
ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略
asp.net UpdatePanel实现异步局部刷新如有雷同,不胜荣欣,若转载,请注明鉴于最近项目需要,研究了一下UpdatePanel控件的使用方法,现总结