- 主题:异步stream的问题
各位,有个stream的问题,有点不明白。
我想给自己的一个结构实现stream特性。但是异步运行时是有很多不同的实现对吧?那是否这些实现,都可以支持我这个结构体的stream?stream的异步运行时和async/.await这一套是同一个运行时来驱动的么?我看介绍他们都是future,都有pool,pending之类的。
或者这么说,我想实现一个异步的运行时,其行为和通常的稍微不同,所以只能自己实现。那么我自己实现的这个运行时,是否可以支持通常的stream?
--
FROM 117.133.52.*
是这个道理。初步认为应该是可以的。有没有运行时实现相关的资料给推荐一下?我试试
【 在 AlphaO 的大作中提到: 】
: 没试过自己实现,仅仅根据印象的看法,如下:
: 实现Stream,前提是实现Future,如果你实现了Future和Stream,又符合标准的话,我觉得,就可以被别的异步运行时操作,因为这些异步运行时本来就应该支持操作Stream
:
--
FROM 221.216.116.*
我去看看
你这种实时性要求高的,貌似rust这种没有实时抢占全靠自觉放弃cpu的合作多任务比较麻烦。
【 在 AlphaO 的大作中提到: 】
: 似
: 印象中smol性能最好,tokio最易用,应该都可以参考
: ...................
--
FROM 221.216.116.*
正在执行的其他任务不能保证及时释放cpu。得一直等到当前任务完成,运行时才有机会去执行到来的消息。如果当前任务消耗时间超过100us。那肯定会丢消息。 或者说不需要当前任务时间长,只要它正赶上消息到来的时间没处理完,那就会丢消息。
可以考虑轮询消息?这样会浪费cpu。
【 在 AlphaO 的大作中提到: 】
: 只要是非实时系统,大概就都不行,换成C和C++更难搞定
: 一次消息16KB,相邻两次消息间隔不定,最长约100us,最短约4~5us
: 用异步任务就会经常错过下一次消息,总怀疑是异步运行时的问题,而且怀疑异步IO会频繁触发系统调用,导致内核态/用户态切换,存在一个不确定开销。 不知道怀疑的点是否合适
: ...................
--
FROM 125.34.113.*
要么独占cpu,如果有多核的话。要么实时os,或者无os
【 在 AlphaO 的大作中提到: 】
: 是的,我摸索感觉,瓶颈主要可能是CPU不只专门接收。仅从代码看,接收1次完毕后,立刻用mpsc发出去,它理应立刻准备去接下一帧。但实际上我感觉——在异步await下——CPU此时也许会进行系统调度,比如后台其他任务突然占用该CPU一定时间等等。 其实如果无操作系统,或者实时
: 低撑渲靡幌拢兰撇换嵊形侍
--
FROM 125.34.113.*
你这个和dpdk类似。它可以做到独占核心。不过你的环境是嵌入式把?如果你可以不用os,可能比折腾这些更简单。
【 在 AlphaO 的大作中提到: 】
: 这个思路尝试过,但对操作系统有要求,而对通用的windows和常用linux变种则行不通,因为这些通用操作系统,为了充分利用硬件,在线程调度方面有内置的优化策略,这种优化调度会动态打破线程和任务的绑定关系。例如,无法将一个核指定为仅仅运行1个特定任务而不运行其他,哪怕
: 强行指定其他用户进程对该核的完全不亲和,但内核进程不归用户控制,还是会征用该核
: 如果硬件是多核的,可以考虑再把接收消息暂存任务放到一个线程中,处理消息放到另一组...
: ...................
--
FROM 123.125.167.*
厉害!
【 在 AlphaO 的大作中提到: 】
: 确实有点这个意思,除了dpdk是利用以太网,我是利用U3。技术途径看着也差不多,数据全程零拷贝,恰好是Rust擅长的。最后软件要在windows上用,因为可能的使用者还是最习惯windows
--
FROM 123.125.167.*
rust是个好东西。我也想了解了解。
【 在 AlphaO 的大作中提到: 】
: 哪里,过奖了,如果用c/cxx、c#肯定搞不到性能这么快和好,可以说是95%得益于Rust工具链
--
FROM 123.125.167.*