游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

DatenLordiouringRust异步库实现方法

  简介
  iouring是Linux最新的异步IO接口,采用两个用户和内核共享的ringbuffer进行交互,性能优于之前的接口且限制更少。虽然iouring仍然处于开发迭代中,但是基本的IO接口已经基本定型,作为高效系统语言的Rust则成为使用该接口的不二之选。现在已经有许多针对iouring的Rust封装,但是有的存在soundness问题,有的存在性能问题,都不是安全高效IO的好选项。我们团队(DatenLord)也进行了自己的尝试,本文就是介绍我们的iouring异步库实现方法。Rust现有异步模式
  Rust的异步库都有自己的异步IO实现方法,但是内部原理大同小异,都是Reactor模式,如下图所示:
  Worker线程将关注的fd注册到Epoll等待队列中,Reactor线程通过Epollwait等待可以进行操作的fd,当有fd可以操作时,Reactor线程通知Worker线程进行真正的IO操作。在此过程中,Reactor线程仅仅起到等待和通知的作用,并不真正进行IO操作,并且这里的IO接口仍然是同步IO接口。这种模式就好比请人帮忙烧开水,但是泡茶的过程还是自己亲自来。
  Reactor模式中,内存buffer一直在用户的控制下,在进行真正的IO操作发生前,随时可以cancel正在等待的请求,因此Reactor模式中不存在内存datarace的情况,接口也就顺势使用了reference,及借用机制。接口示例如下:fnreada(amutself,buf:amut〔u8〕)ImplFuturea,ResultusizeiouringRust底层封装
  iouring的官方库只有C语言版本及liburing,因此Rust异步封装之前必须有一套可用的Rust底层封装。这一层封装大家有不同的选择:有的选择自己从头实现,如tokio的iouring;我们的选择则是复用liburing,先进行一层binding,然后在进行一层面向对象的封装,抽象出SQ,CQ和Register等,这一层抽象借鉴的tokio的iouring。前一种方法对实现具有更强的控制力,后一种方法则降低了维护成本。无论哪一种方法,最终的目的和效果是一样的搭建脚手架,为异步封装扫平障碍。iouring异步模式
  iouring和Rust现有异步模型不同,该异步操作是由操作系统完成的,并不需要用户线程参与,该工作方式非常适合Proactor模式。下图为Proactor模式示意图:
  根据图中所示,异步操作由Proactor线程完成,更准确说是由Proactor线程提交IO任务给内核,等内核完成了IO操作再讲结果通知给Worker线程。和Reactor模式相比,Proactor为用户完成了更多的任务,这就好比请人帮忙把烧水和泡茶的活一起干了,直接喝茶就行。iouringProactor设计
  在决定了采用Proactor模式来完成iouring之后,我们还需要考虑iouring自己的特性。iouring在设计的时候只考虑了一个线程一个iouring实例,因此无论是内核接口还是libfuse的封装接口都不易实现多线程并发访问。基于这个考虑,有两个方法解决,第一个方法为iouring操作上锁,也就是间接的将多线程并发操作串行化;第二个方法为只用单线程进行iouring操作,其他任务给该线程提交任务。ringbahn采用了第一种方法,我们采取了第二种方法。第二种方法的好处在于,可以将连续的多个IO操作一次提交,在繁忙的系统中能够提高性能。
  下图为我们的架构设计:
  在我们的设计中,所有的WorkerTask通过全局的channel向SubmitterTask提交IO任务,当没有IO任务时SubmitterTask会在等待在该channel上,而当请求繁忙时SubmitterTask会打包多个任务一次性提交。CompleterThread会收取ring上完成的任务,并且唤醒等待这些任务的WorkerTask。
  单个iouring实例同时处理的IO请求数目是有上限的,如果完成的任务不及时接收则会出现丢失的情况,因此我们维护了一个全局计数器来统计正在被处理的IO请求数目,当数目达到上限时则会挂起WorkerTask让其等待。内存安全
  Rust语言的内存安全要求不能出现datarace和useafterfree的情况,而iouring的使用模型则存在现在的风险。操作系统会异步地操作内存buffer,这块buffer如果被用户同步操作测会出现datarace的情况。因此被Proactor线程占用的内存必须独占,否则任何被取消的IO操作都会导致内存被用户态同时使用。
  为了达到上述目的,Reactor的基于reference的接口不能被使用,需要采用新的接口,如下所示:pubasyncfnread(fd:RawFd,buffer:Vecu8,count:usize,offset:isize,)(io::Resultusize,(RawFd,Vecu8))
  在该接口中用户会在IO操作过程中交出buffer所有权,在任务完成时返还buffer所有权总结
  现有的Rust异步IO模型(Reactor)其实分为两步,第一步由操作系统通知用户哪些fd可以使用,第二步再由用户完成IO操作,操作系统仅仅负责通知,真正干活的还是用户自己。区别于该IO模型,iouring的IO模型为Proactor,所有的异步IO请求都是操作系统来完成,用户仅仅需要发送请求和接收结果。
  我们DatenLord团队在充分考虑了iouring特点和Rust语言的需求后实现了一个iouring的异步库。这个库同时照顾到性能和易用性,方便用户迁移现有代码,同时该库不依赖于任何一部框架,可以和绝大多数已知的异步框架一起使用。此链接为该库的代码地址,欢迎大家提交PR和issue,帮助进一步完善功能。
  作者施继成
  后期编辑张汉东
  转自《RustMagazine中文精选》

buxom是什么牌子?buxom是哪个国家的?buxom是比较小众的品牌,它家的口红、唇釉、唇蜜等都比较的好用,而有些人不了解这个牌子。那么buxom是什么牌子?buxom是哪个国家的?buxom是什么牌子BU……谜尚爱心腮红色号missha爱心腮红试色missha谜尚这次也推出了RollingHeartBallBlusher爱心腮红球,真的是超级梦幻呢。今天5号网小编就要为大家介绍一下,谜尚爱心腮红色号有哪些?missha爱……摩卡短波波剪完要烫吗摩卡短波波怎么烫好看摩卡短波波是一款经典的发型,已经流行很多年,随着时尚的推进,摩卡短波波早已演变出很多款式,也演变出适合不同脸型的摩卡短波波,下面5号网小编带大家来看一下摩卡短波波剪完要烫吗?摩……二胎妈妈亲述第一次怀孕和第二次怀孕有什么不同大家好,我是新晋的二胎妈妈小燕。2016年生下大宝瑶瑶后,我在产房里发誓再也不要生娃了,宫缩的痛、开指的痛再也不想经历一次了。不过女人真是健忘,看着大宝快乐幸福地成长,我……文艺女生适合什么发型文艺女青年适合什么发型文艺女青年们对于自己的日常打扮还是挺注意的,尤其发型方面更有自己独特的理解,那么文艺女青年们适合什么样的发型呢,以下5号网小编给大家推荐文艺范女生发型图片大全。文艺女生适合什么……3ce遮瑕液色号试色3ce遮瑕液试色图给大家推荐一款遮瑕液吧!这款遮瑕液是水质的,一点都不干,遮瑕力度也是很强哦!它能够保持脸不至于太干浮粉,减少脸上的瑕疵!下面来看看3ce遮瑕液色号试色3ce遮瑕液色号试色……培养一个学霸能有多难?学会这三个笨办法,保证孩子脱胎换骨培养一个学霸能有多难?学会这三个笨办法保证孩子脱胎换骨在很多人的印象里,培养一个学霸孩子,不仅需要先天的遗传好,还需要父母付出巨大的心血,总而言之,要想让孩子变成学……2018最流行的十款发型优雅简单的短发扎法在我们平时的日常生活中有很多人都想换发型,现在又临近新年,都说新年要有新气象,那就从头开始,先换一个新发型,让你从头美到脚,那么下面就由5号网的小编来为大家介绍2018最流行的……郑爽起诉A股公司,索要1。08亿片酬被立案调查!上海文峰2元宏观中国人民银行决定,自2021年12月15日起,上调金融机构外汇存款准备金率2个百分点,即外汇存款准备金率由现行的7提高到9。消息一出,在岸、离岸人民币汇率直线跳水,离……香奈儿粉饼多少钱?香奈儿粉饼专柜价香奈儿家推出了好几款粉饼,价格也是有所不同,今天5号网小编就要为大家介绍一下,香奈儿粉饼多少钱?香奈儿粉饼专柜价是多少?香奈儿粉饼专柜价香奈儿青春光彩保湿粉饼SPF10专……elf眼影色号试色e。l。f眼影试色图e。l。f是在美妆博主眼中非常火的一个牌子,欧美人非常喜欢它,超高性价比的开架品牌哦!尤其是它们家的眼影,新手用起来都很顺畅,下面来看看elf眼影色号试色吧!elf眼影色号……银屑病为什么不能喝酒?中国人进行应酬时,总是喜欢喝酒,适当饮酒是能够提神和御风寒的,但是饮酒过度对身体就极为不利了。尤其是对于银屑病患者来说,饮酒会导致病情恶化的。所以银屑病患者一定不能饮酒。那么,……
涂了口红嘴唇边有白色积线正常吗口红积白线太可怕我们平时用的最多的化妆品就是口红,口红有很好的美妆效果,是很受大家喜爱的彩妆之一,有时候我们涂口红的时候会发现嘴巴会积上一层白线。涂了口红嘴唇边有白色积线正常吗正常,一般……日本天才球员张本智和,放弃中国国籍后回国祭祖,却遭到众人唾弃对于张本智和这个名字,相信很多关注乒乓球的球迷们一定非常熟悉。张本智和是日本著名乒乓球天才运动员,但他的本名实际上叫做张智和,因为他的父母都来自中国,他的祖籍也在中国四川。只是……美甲怎么留白好看?好看的美甲留白款式美甲的款式繁多,但是妹纸们只要先确定好自己想要的风格就可以搞定了,就像是最近比较火的一款美甲,不同意以前那种全部涂满的指甲款式,这是一种留白式的美甲涂法,看起来敲清新呢,下面5……扇形甲怎么修复扇形甲修复方法到处都能看到人家晒指甲油,啊,只有美手才能这么肆意随便涂啊,我的指甲不好看,扁扁的怎么办?涂什么都不好看,花样也做不了,下面5号网小编带大家来看一下扇形甲怎么修复?扇形甲修复方……雅诗兰黛明彩笔怎么用?雅诗兰黛明采笔使用方法雅诗兰黛明采笔既可以遮瑕又可以修容,可谓是一笔多用。今天5号网小编就要为大家介绍一下,雅诗兰黛明彩笔怎么用?雅诗兰黛明采笔使用方法是什么?雅诗兰黛明彩笔怎么用旋转底端,转……CT粉底液好用吗?CharlotteTilbury粉底液怎么CharlotteTilbury家的口红一直很火,喜欢CT家产品的妹子们可以尝试下她家粉底液,也会有惊喜。今天5号网小编来给大家讲讲CharlotteTilbury粉底液怎么样……曼丹卸妆水怎么样曼丹卸妆水好用吗曼丹卸妆水产品一直是小编向大家推荐的卸妆产品之一,推荐它的原因主要还是其价格与卸妆效果的确都比较出众,如果你还在犹豫是否要购买这款卸妆产品,以下的个人与用户点评相信对你有所借鉴……wetnwild口红色号wetnwild口红试色图wetnwild口红颜色涂上去很细腻,不干燥,适合秋冬季节和黑黄皮。那么wetnwild口红色号有哪些?下面小编为你提供wetnwild口红试色图。wetnwild口红色……wetnwild口红怎么样?wetnwild口红好用吗?wetnwild口红颜色特别好,自然淡粉不艳,不夸张且显皮肤白。那么wetnwild口红怎么样?wetnwild口红好用吗?wetnwild口红怎么样颜色都很正,比……atreus水光霜怎么样atreus水光霜好用吗atreus最近推出了新品水光霜,看博主试色挺美的,自己也打算买一款体验下。那么atreus水光霜怎么样?atreus水光霜好用吗?atreus水光霜介绍ATREUS水光……朗金香水档次怎么样朗金香水价格表很多人初次接触朗金这个牌子的香水,都会被它精致高雅的包装所吸引,然后被它的味道所俘虏。那么,朗金香水档次怎么样?朗金香水多少钱一瓶?朗金香水价格怎么样价格:109单……水粉霜和bb霜的区别水粉霜和bb霜哪个好?水粉霜和bb霜都是非常好用的产品,bb霜也算得上是底妆的鼻祖了,水粉霜是这段时间推出来了,而且每一款都是爆款,那么,究竟哪一个更胜一筹呢?水粉霜和bb霜的区别水粉霜和bb……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网