当前位置: 首页 > news >正文

几何背景生成器网站徐州网站建设电话

几何背景生成器网站,徐州网站建设电话,二手物品交易网站开发意义,江门seo推广优化背景 最近正在做AI知识库的相关内容,web框架使用Rocket,需要使用SSE处理模型的流式输出,而Rocket的SSE功能比较单一,没有进行全局状态管理,因此需要手动处理SSE连接,而对于web环境下,必然会涉及…

背景

最近正在做AI知识库的相关内容,web框架使用Rocket,需要使用SSE处理模型的流式输出,而Rocket的SSE功能比较单一,没有进行全局状态管理,因此需要手动处理SSE连接,而对于web环境下,必然会涉及到多个线程,在多线程环境下使用crossbeam的channel收发数据时便遇到了阻塞问题。

场景代码

对有问题的代码简化如下:

TextStream! {while let Some(item) = receiver.recv() {// 推送消息}
};

第一个请求过来时,一切正常;而第二个请求过来时,不仅仅是单个接口阻塞,而是整个程序都会阻塞。并且,第二个请求来后,所有的tokio::spawn中的异步块均无法进入。后来重新查看了crossbeam和rocket的文档,明白了导致阻塞的原因:

  • Rocket使用Tokio的异步Runtime,Tokio使用协程而非线程
  • receiver.recv()会阻塞当前线程
    以上两点,导致第二个请求来后,由于receiver.recv()阻塞了当前线程,后续的请求也是跑在同一线程上,而导致整个系统的阻塞。

解决办法:

  1. 使用异步Stream包装receiver,使其以非阻塞的方式运行在Tokio上
  2. 使用Tokio的mpsc的channel,考虑到SSE的单向传输特性,只需要一个消费者向前端发送消息,因此mpsc更合适。

总结

  • crossbeam的channel是mpmc模型,即支持多生产者和多消费者,在非异步环境中比较好用,而对于基于协程的异步环境,如果不加处理可能导致系统阻塞,而且关闭channel也比较麻烦,可能会导致channle无法关闭而阻塞。因此,crossbeam的channel其实更适合逻辑简单且需要高频传递消息的场景。
  • tokio的channel是mpsc模型,即多生产者单消费者,比较适合做SSE推送,也更适合在异步环境中使用。值得注意的是,该channel的Sender支持Clone,而Receiver不支持Clone,所以需要设计好代码结构,能够在需要的地方获取到channel。
http://www.dtcms.com/a/493954.html

相关文章:

  • 青岛网站建设兼职上海哪家seo好
  • 做男女的那个视频网站新郑网站优化
  • 万网网站建设特点基本seo
  • 如何建网站吗?网站的风格设计包括哪些内容
  • 上饶做网站哪家好哦手机做app任务的网站
  • 淘宝网站开发者如何做网站优化的内容
  • 六年级做的网站的软件下载怎么免费创建自己的网站
  • 自己做文学网站赚钱吗京东网站开发技术
  • 网站制作技术方案一个网站的建设流程有哪些资料
  • 网站建设的安全应该注意什么苏州三大建筑设计院
  • 做男装比较好的网站有哪些网站素材站
  • 2017年网站建设视频教程网页设计尺寸1920
  • 网站插件模块原理wordpress使用redis
  • 做同性恋网站犯法吗石家庄抖音代运营公司
  • 邢台做网站优化邯郸市市长
  • 萤火虫网站建设优化建设物流网站
  • 建设网站公司怎么分工如何建网站赚钱
  • 建设网站的工作总结建筑工程培训课程
  • 长沙做网站公司有哪些wordpress适合做官网
  • 学校网站建设汇报ppt海南建设监理协会网站
  • 网站前台可以打开建设网站模板免费
  • 关于网站制作的论文哪家建站好
  • 集团网站改版方案做网页的软件h
  • 免费公司网站怎么做网站布局图片
  • 做网站还要做点手机吗正中路桥建设发展有限公司网站
  • 全网站开发是什么营销网站有哪些
  • 上海专业网站建设多少钱wordpress密码进入网站
  • 古田住房与建设局网站广昌网站建设
  • 什么网站值得做推广公司的网站可以采取哪些方式
  • 濮阳网站建设推广2w网站2w网站建设建设