message queue & event loop

部署运行你感兴趣的模型镜像











您可能感兴趣的与本文相关的镜像

AutoGPT

AutoGPT

AI应用

AutoGPT于2023年3月30日由游戏公司Significant Gravitas Ltd.的创始人Toran Bruce Richards发布,AutoGPT是一个AI agent(智能体),也是开源的应用程序,结合了GPT-4和GPT-3.5技术,给定自然语言的目标,它将尝试通过将其分解成子任务,并在自动循环中使用互联网和其他工具来实现这一目标

impl<T> Worker<T> where T: TapT + ReadNotifier, { fn process_tx(&mut self) { process_tx(&mut self.tx_queue, &mut self.tap) } fn process_ctrl(&mut self) -> Result<(), NetError> { let ctrl_queue = match self.ctrl_queue.as_mut() { Some(queue) => queue, None => return Ok(()), }; process_ctrl( ctrl_queue, &mut self.tap, self.acked_features, self.vq_pairs, ) } fn run(&mut self, handle_interrupt_resample: bool) -> Result<(), NetError> { let wait_ctx: WaitContext<Token> = WaitContext::build_with(&[ // This doesn't use get_read_notifier() because of overlapped io; we // have overlapped wrapper separate from the TAP so that we can pass // the overlapped wrapper into the read function. This overlapped // wrapper's event is where we get the read notification. #[cfg(windows)] ( self.overlapped_wrapper.get_h_event_ref().unwrap(), Token::RxTap, ), #[cfg(any(target_os = "android", target_os = "linux"))] (self.tap.get_read_notifier(), Token::RxTap), (self.rx_queue.event(), Token::RxQueue), (self.tx_queue.event(), Token::TxQueue), (&self.kill_evt, Token::Kill), ]) .map_err(NetError::CreateWaitContext)?; if let Some(ctrl_queue) = &self.ctrl_queue { wait_ctx .add(ctrl_queue.event(), Token::CtrlQueue) .map_err(NetError::CreateWaitContext)?; } if handle_interrupt_resample { if let Some(resample_evt) = self.interrupt.get_resample_evt() { wait_ctx .add(resample_evt, Token::InterruptResample) .map_err(NetError::CreateWaitContext)?; } } let mut tap_polling_enabled = true; 'wait: loop { let events = wait_ctx.wait().map_err(NetError::WaitError)?; for event in events.iter().filter(|e| e.is_readable) { match event.token { Token::RxTap => { let _trace = cros_tracing::trace_event!(VirtioNet, "handle RxTap event"); self.handle_rx_token(&wait_ctx)?; tap_polling_enabled = false; } Token::RxQueue => { let _trace = cros_tracing::trace_event!(VirtioNet, "handle RxQueue event"); if let Err(e) = self.rx_queue.event().wait() { error!("net: error reading rx queue Event: {}", e); break 'wait; } self.handle_rx_queue(&wait_ctx, tap_polling_enabled)?; tap_polling_enabled = true; } Token::TxQueue => { let _trace = cros_tracing::trace_event!(VirtioNet, "handle TxQueue event"); if let Err(e) = self.tx_queue.event().wait() { error!("net: error reading tx queue Event: {}", e); break 'wait; } self.process_tx(); } Token::CtrlQueue => { let _trace = cros_tracing::trace_event!(VirtioNet, "handle CtrlQueue event"); if let Some(ctrl_evt) = self.ctrl_queue.as_ref().map(|q| q.event()) { if let Err(e) = ctrl_evt.wait() { error!("net: error reading ctrl queue Event: {}", e); break 'wait; } } else { break 'wait; } if let Err(e) = self.process_ctrl() { error!("net: failed to process control message: {}", e); break 'wait; } } Token::InterruptResample => { let _trace = cros_tracing::trace_event!(VirtioNet, "handle InterruptResample event"); // We can unwrap safely because interrupt must have the event. let _ = self.interrupt.get_resample_evt().unwrap().wait(); self.interrupt.do_interrupt_resample(); } Token::Kill => { let _ = self.kill_evt.wait(); break 'wait; } } } } Ok(()) } } 逐行解释
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值