Isa*_*avo 21 c c++ mysql multithreading connection-pooling
我们正在做一个MySQL的小基准测试,我们希望看看它对我们的数据的执行情况.
该测试的一部分是看多个并发线程在服务器上使用各种查询进行操作时的工作原理.
在MySQL文档(5.0)是不是多线程的客户真的清楚.我应该指出我确实链接了线程安全库(libmysqlclient_r.so
)
我正在使用预准备语句并执行read(SELECT)和write(UPDATE,INSERT,DELETE).
mysql_real_connect()
返回我打电话时得到的原始数据库句柄mysql_init()
)mysql_affected_rows
返回正确的值而不是与其他线程的调用冲突(互斥/锁可能工作,但感觉不对)cha*_*cus 26
作为一个从多个线程调用MySQL的相当大的C应用程序的维护者,我可以说我只是在每个线程中创建一个新连接没有问题.我遇到的一些警告:
libmysqlclient_r
.mysql_library_init()
(一次,从main()
).阅读有关在多线程环境中使用的文档,了解为什么有必要.MYSQL
使用新结构mysql_init()
.这有呼吁mysql_thread_init()
你的副作用. mysql_real_connect()
像往常一样在每个线程内部,使用其特定于线程的MYSQL结构.mysql_thread_end()
在每个线程mysql_library_end()
的末尾(以及结尾处main()
)使用.无论如何,这是一个很好的做法.基本上,不要共享MYSQL
结构或任何特定于该结构创建的东西(即MYSQL_STMT
s),它将按预期工作.
这似乎比向我建立连接池要少.