Я делаю эксперимент, который одновременно вставляет данные в таблицу MySQL многопоточностью.
Вот частичный код на C ++.
bool query_thread(const char* cmd, MYSQL* con) {
if( !query( cmd, con ) ) {
return 0;
}
return 1;
}
int main() {
........
if(mysql_query(m_con, "CREATE TABLE tb1 (model INT(32), handle INT(32))") != 0) {
return 0;
}
thread thread1(query_thread, "INSERT INTO tb1 VALUES (1,1)", m_con);
thread thread2(query_thread, "INSERT INTO tb1 VALUES (2,2)", m_con);
thread thread3(query_thread, "INSERT INTO tb1 VALUES (3,3)", m_con);
thread1.join();
thread2.join();
thread3.join();
}
Но выдается сообщение об ошибке MySQL.
ошибка cmd: INSERT INTO tb1 VALUES (1,1)
Потерянное соединение с сервером MySQL во время запроса
Ошибка сегментации
У меня следующие вопросы:
- Это потому, что MySQL не может одновременно принимать вставки?Или плохое использование многопоточности.
- При многопоточности, как указано выше, это помогает ускорить программу?Я понимаю, что лучше всего использовать несколько вставок на запрос и ЗАГРУЗИТЬ ДАННЫЕ INFILE.Но я просто хочу знать, может ли этот способ помочь.