我正在创建一个程序,该程序将从远程机器接收消息并需要将消息写入磁盘上的文件。我发现的困难在于这个程序的目的是测试接收消息的库的性能,因此,我需要确保将消息写入磁盘不会影响库的性能. 该库通过回调函数将消息传递给程序。另一个困难是解决方案必须独立于平台。
我有什么选择?
我想到了以下几点:
- 用于
boost:asio
写入文件,但似乎(请参阅此文档)异步写入文件位于该库的 Windows 特定部分中 - 因此无法使用。 boost::interprocess
用于创建消息队列,但本文档表明有 3 种方法可以发送消息,如果消息队列已满,所有方法都需要程序阻塞(隐式或不阻塞),我不能冒险。- 创建一个
std::deque<MESSAGES>
从回调函数推送到双端队列,并在写入文件时弹出消息(在单独的线程上),但不保证 STL 容器是线程安全的。我可以锁定双端队列的推送和弹出,但我们谈论的是连续消息之间的 47 微秒,所以我想完全避免锁定。
有人对可能的解决方案有更多想法吗?