【发布时间】:2014-10-25 16:59:56
【问题描述】:
我知道异步套接字编程比同步更具可扩展性。
但有一点我不太明白:
如果您的事件循环应该是非阻塞的,您如何将耗时的工作委托给另一个线程而不阻塞?工作队列通常需要一个互斥体来保护。我知道有无锁队列,但这是如何完成的?有人可以给这个东西一点概念吗?
【问题讨论】:
-
您只需将长工作拆分为一系列短 sn-ps。阅读CPS,这可能会提供理论见解。
-
@BasileStarynkevitch 究竟是如何解决问题的?
-
将上下文数据排队到另一个线程/池中。完成后再次将其重新排队,以便为它触发回调并与之一起触发。 ASIO 不好玩吗:)
-
@MartinJames 但这需要互斥体,不是吗?
-
@HansPassant 我的问题是:事件循环应该是非阻塞的,但是任务队列需要互斥体,所以它有可能会阻塞事件循环,这很糟糕。
标签: c sockets asynchronous tcp kqueue