韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

文章 > 头条 > 高并发中Poll、Epoll、Future的概念

高并发中Poll、Epoll、Future的概念

Poll Epoll Future

头像

小妮浅浅

2021-10-09 16:47:0015946浏览 · 0收藏 · 0评论

高并发中有几个重要概念:Poll、Epoll、Future。

Future并不是一个主流的实现,但是Future与Poll的概念又是如此重要,我们必须放在开头来讲,因此这里先将重心放在Rust身上,由于Rust与Go、Java相比对于Future实现比较完整,特性支持也彻底。因此下面的代码均以Rust为例。

 

简单来讲Future不是一个值,而是一种值类型,一种在未来才能得到的值类型。Future对象必须实现Rust标准库中的std::future:: future接口。Future的输出Output是Future完成后才能生成的值。在Rust中Future通过管理器调用Future::poll来推动Future的运算。Future本质上是一个状态机,而且可以嵌套使用,我们来看一下面这个例子,在main函数中,我们实例化MainFuture并调用.await,而MainFuture除了在几个状态之间迁移以外,还会调用一个Delay的Future,从而实现Future的嵌套。

 

MainFuture以State0状态做为初始状态。当调度器调用poll方法时,MainFuture会尝试尽可能地提升其状态。如果future完成,则返回Poll::Ready,如果MainFuture没有完成,则是由于它等待的DelayFuture没有达到Ready状态,那么此时返回Pending。调度器收到Pending结果,会将这个MainFuture重新放回待调度的队列当中,稍后会再度调用Poll方法来推进Future的执行。具体如下:

use std::future::Future;
use std::pin::Pin;
usestd::task::{Context, Poll};
usestd::time::{Duration, Instant};
 
struct Delay {
    when: Instant,
}
impl Future forDelay {
    type Output = &'static str;
 
    fn poll(self: Pin<&mut Self>, cx:&mut Context<'_>)
        -> Poll<&'static str>
    {
        if Instant::now() >= self.when {
            println!("Hello world");
            Poll::Ready("done")
        } else {
          
            cx.waker().wake_by_ref();
            Poll::Pending
        }
    }
}
enum MainFuture {
   
    State0,
    State1(Delay),
    Terminated,
}
impl Future forMainFuture {
    type Output = ();
 
    fn poll(mut self: Pin<&mut Self>,cx: &mut Context<'_>)
        -> Poll<()>
    {
        use MainFuture::*;
     
        loop {
            match *self {
                State0 => {
                    let when = Instant::now() +
                        Duration::from_millis(1);
                    let future = Delay { when};
                    println!("initstatus");
                    *self = State1(future);
                }
                State1(ref mut my_future) =>{
                    matchPin::new(my_future).poll(cx) {
                        Poll::Ready(out) =>{
                            assert_eq!(out,"done");
                           println!("delay finished this future is ready");
                            *self = Terminated;
                            returnPoll::Ready(());
                        }
                        Poll::Pending => {
                            println!("notready");
                            returnPoll::Pending;
                        }
                    }
                }
                Terminated => {
                    panic!("future polledafter completion")
                }
            }
        }
    }
}
#[tokio::main]
async fn main() {
    let when = Instant::now() +Duration::from_millis(10);
  
    let mainFuture=MainFuture::State0;
    mainFuture.await;
  
}

以上就是高并发中Poll、Epoll、Future的概念,希望对大家有所帮助。更多精彩内容分享:头条

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

《妻子6》在线观看免费版电视剧| 王娟被老赵一夜干4次| 啊灬啊灬啊…快…深的含义| 妈妈的朋友6| 裸眼3D| 男牛把小困困放到女生困里视频| 三男一女CP免费观看电视剧大全| 韩漫免费观看下拉式漫画软件测评 | 欧美精品| 色翁荡熄300篇| 《厨房激战5》完整版在线观看| B级文件| 一枪战三母2-1免费观看央视网| 5YY3.CNV7Y7.CC| 少女频道免费观看第二集视频| 光溜溜美女素材图片| 麻花传MV在线观看的最新进展| 蜜桃视频| 电影《老公上班后》免费观看| 门卫秦大爷1-42章免费阅读| 日韩大片PPT免费PPT | 《性房纵欲》在线观看| 大染坊续集45集完整版免费观看| 下面的小嘴又饿了| 《酒店激战》动漫1-5集免费观. | 宝宝扶着水池乖乖让爸爸洗头文| 京香JULIA| 《课后2对1特别授课》女主角是..| 人犬兽人在线观看免费完整| 《落魄贵族当女仆》樱花动漫| 人狗大战6免费观看正版| 4399在线观看免费高清电视剧| 郑云龙| 《办公室高潮秘书2》电影| 欧洲尺码和亚洲码是3D还是2D| 美国禁忌6 结局| 腿张开我要添到你高潮H漫画软件 他扒开我小滨添我三男一女视频 丫头把腿开大让我添添电影 | 国产在线观看免费全集电视剧网站| 维密内衣秀| 《家访的老师》动漫在线观看| 黑色蕾丝女装大长腿