有没有开始使用0.16的Io接口的用户?在思考逻辑如何移植到Io接口的时候遇到了一些瓶颈 #324
Unanswered
npc1054657282
asked this question in
新手提问
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
有一个需求大致是这样的:包含一个http服务,写法是有M个线程共享一个事件队列,每个线程都有一个状态机,拿一个事件,处理以后future放回事件队列里。有点类似散装无栈协程,我理解当前的Io接口是没有无栈协程的,但是只要大概抽象能移植过去就行,所以在只使用linux运行的前提下,移植到Uring应该是可行的。
但是,项目内还包括cpu密集的部分功能,且这部分功能交给外部C库来执行。因此,这部分内容只使用普通线程池。但是这部分cpu密集功能是生产者,而为了避免下游消费者消费不及时导致内存爆炸,所以是设置了生产队列上限的。因此线程池的每个线程都传入了一个http服务事件的状态机,每当生产队列达到上限,就从事件队列里窃取一个任务执行。只有事件队列也没有任务时才会阻塞。
先前的架构如果要移植到新的Io接口,cpu密集这部分相当于跨了两个Io,既使用线程池Io,又在可能阻塞时参与整体的事件Io循环。我目前想不清楚怎样才能用新的Io接口抽象表达。
Beta Was this translation helpful? Give feedback.
All reactions