【发布时间】:2012-03-16 11:09:03
【问题描述】:
为了避免每次需要向 MySQL 发起查询时建立新连接的开销,有两个可用选项:
- 持久连接,即请求新连接,检查是否已打开“相同”连接,如果已打开,请使用它。
- 连接池,客户端维护一个连接池,以便每个需要使用连接的线程从池中检出一个连接,并在完成后将其返回池中。
所以,如果我有一个多线程服务器应用程序,预计每秒处理数千个请求,并且每个线程都需要对数据库进行查询,那么有什么更好的选择?
据我了解,使用持久连接,我的应用程序中的所有线程都将尝试使用与数据库的相同持久连接,因为它们都使用相同的连接。所以它是一个跨多个应用程序线程共享的连接——因此请求将很快在数据库端阻塞。
如果我使用连接池机制,我将让所有应用程序线程共享一个连接池。因此阻塞请求的可能性较小。但是,对于连接池,应用程序线程应该等待从池中获取连接,还是应该以循环方式向池中的连接发送请求,并让队列(如果有)发生在数据库上?
【问题讨论】:
标签: mysql multithreading database-connection