介绍C++的非线程异步IO?

Dom*_*nic 19 c++ io multithreading asynchronous

我在一个由"UI开发人员"(我们)和"C++开发人员"(他们)组成的桌面应用程序团队中工作.C++开发人员负责向我们提供我们在UI中显示的所有数据,因此他们可以执行所有IO,数据库访问,Web调用等.

最近我们遇到了一些严重的性能问题,IO阻塞了UI线程.当然,解决方案是使IO异步.但是C++开发人员坚持认为这只能通过生成一个新线程来实现,而我们知道这个线程非常昂贵.

我从Node.js等了解到async IO不需要涉及线程.我知道Win32,可能是Mac,确实有一个事件循环.但是,我不知道C++版本中用于执行异步非线程IO的解决方案是什么.(也许那个libuv是节点的基础?).

任何人都可以指向一些流行的库,或者更好的教程文章,所以我们可以将这个概念引入我们的C++开发人员吗?跨平台(PC和Mac)的奖励积分.如果存在异步非线程数据库解决方案,则会获得更多奖励,因为我相信我们使用SQLite是我们许多问题的根源.

Sam*_*ler 14

提升异步I/O(asio).他们有一个很好的教程和几个例子.它是跨平台的.

  • @ArunMu你可以在你的完成处理程序中做任何你想做的事情,只需将你的"作业"对象"发布"到`io_service`.现在,这并不是说它会神奇地阻止你(函数仍然可以阻塞,如果你只有一个线程可能是一个问题).将包装作业(作为执行处理程序)与`deadline_timer`对象结合使用可以非常灵活. (3认同)