如果所有的用户连接请求都只占用一个持久链接线程,那打个比方,100万用户访问这一个网站,对数据库进行操作,只占用一个数据库线程??
----------------------------------------------
那搞个访问队列是必须的了,只有一个连接资源,高并发的情况下,怎么分配给100w个用户,怎么也得排排队吧,分配还是小事,用户是不是等得了那么久。。。this is a really big issue。
我看了下java实现的数据库连接池介绍,那也得有个最小连接数(不管进程是否使用,总是保留这么多连接),和最大连接数,如果进程访问连接池时,发现已经到达最大连接,那进程就得推入一个队列等候空闲的连接。
所以只能是一个php进程至少保持一个mysql连接,但是还得保证有gc机制,就是楼上说的wait_timeout或者interactive_timeout.然后还是不够,假设站点访问高并发,用户停留时间长,那么mysql连接数就很可能超过mysql本身设置的最大连接数,这时候怎么办?将php的mysql连接请求推入队列应该可以避免报错,但是鬼知道还要等多久。
似乎没有个解决方案,那么还是下大力气设计好缓存系统吧,或者引入nosql吧。