【发布时间】:2017-02-08 15:47:31
【问题描述】:
我正在创建一个监控应用程序。我想从所有服务器读取查询并将其存储在 sqlite 文件中。在需要时显示它。我正在使用 c++ 编写此应用程序 - 从多个服务器获取数据并将其存储到单个 sqlite 数据库。我正在使用单独的线程从多个服务器获取数据。如果我直接获取数据并将数据写入sqlite,那么它可能会锁定sqlite文件,因为100个线程将同时写入。 从多个线程将数据写入sqlite的最佳方法是什么?
【问题讨论】:
-
The X-Y solution:考虑使用
select、epoll、重叠 IO 或您的操作系统最支持的任何 IO 多路复用器来减少线程数。 -
编辑了我的问题。我无法减少线程数,这取决于连接的服务器数量。
-
对,但是使用多路复用器,一个线程可以管理多个服务器。
-
为了强化 user4581301 的评论,请记住来自多个服务器的所有网络流量都通过您计算机上的单个网络接口。看起来您正在多个线程中同时访问多个服务器,但由于这一切都发生在您的网络上,因此访问是序列化的。所以一个线程可以像处理多个线程一样容易地处理多个服务器连接。
-
我还强烈建议您重新考虑 user4581301 的评论。谷歌“c10k”问题。您可能在滥用线程。
标签: c++ multithreading sqlite