c++ - 如何在 C++ 代码中运行多个线程
问题描述
我是 C++ 的初学者。我编写了一个程序来从一个数据库中提取数据并将这些数据存储到另一个数据库中。我只想添加多个线程来加快进程。我希望通过两种方式做到这一点。
- 从第一个数据库中提取数据并将这些数据存储在内存中。(在这种情况下,我需要两种std::vector类型的数据)
- 在从数据库中提取数据时,如果向量大小超过 10000,则需要调用两个线程并需要启动,从两个向量中(分别)获取数据并将这些数据存储在第二个数据库中。
考虑下面的例子。这是一个简单的代码来演示上述场景。有一个具有大量迭代的 for 循环。我需要为此代码启动两个线程以从 dataOne 和 dataTwo 向量中提取数据(两者都是单独的线程),并在i = 10000时将这些数据存储在 dataThree 和 dataFour 向量中。
使用命名空间标准;
int main(){
std::vector<std::vector<int>> dataOne;
std::vector<std::vector<int>> dataTwo;
std::vector<std::vector<int>> dataThree;
std::vector<std::vector<int>> dataFour;
for(int i=0; i < 10000000; i++){
std::vector<int> temp = {1,2,3};
dataOne.push_back(temp); //store data in vector-one
std::vector<int> temp2 = {3,4,5};
dataTwo.push_back(temp2); //store data in vector-two
}
}
当 i=10000 时,应该有三个线程在运行,
线程一 - 从 dataOne 向量中获取数据并存储在 dataThree 中
线程二 - 从 dataTwo 向量中获取数据并存储在 dataFour 中
线程 main - 处理 main 函数中的 for 循环
谁能帮我解决这个问题?
解决方案
我是 C++ 的初学者。我编写了一个程序来从一个数据库中提取数据并将这些数据存储到另一个数据库中。我只想添加多个线程来加快进程。我希望通过两种方式做到这一点。
无论您使用一个线程还是多个线程,您都可能以一种非常无效的方式执行此操作。假设“提取数据”是指使用 DBMS 的本机协议或 ODBC,这非常慢 - 它需要序列化、打包、通过各种缓冲区,然后是协议客户端的应用程序和反序列化。这忽略了服务器上数据布局更改的潜在开销。...这只是其中的一部分;您再次为第二个 DBMS 完成整个过程。
您真的应该尝试使用 DBMS 的本机/内部导出功能,然后使用其他 DBMS 导入/批量加载功能。或者,如果第二个 DBMS 支持第一个的本机存储格式,您也许可以完全避免导出部分。
推荐阅读
- python - 如何修复这个 Django HTML 模板错误?
- sql - 查询以检查在 oracle 中的表上完成的最后 DML 的日期和时间
- linux - 使用 find 定位不属于 USER 或 GROUP 的文件
- sql - ORACLE:用于提取每个类别的最后进入日期的 SQL 查询
- eclipse - 从 Eclipse 停止执行 selenium 测试
- arrays - 在rails上添加到数组ruby时得到错误的输出
- docker - Docker、rabbitMQ 和 pike 连接被拒绝
- javascript - 使用库 react-cytoscape.js 进行一些拖动操作后如何重置为初始坐标
- java - 如果过滤器失败,则流替代方案避免使用 else 部分
- ios - 如何本地化 iOS 14 小部件的名称 (CFBundleDisplayName)