不搞数据库的人我估计都搞不明白数据库的并发跟操作系统的并发不是一回事,当谈论操作系统的并发处理能力时,是在说操作系统能让 cpu 运行多少个线程,所以一听到线程数少就认为在限制并发处理能力。
而数据库的并发是指数据库处理事务的能力,哪怕在自动提交模式下执行单条 sql 语句,对数据库来说也是一个事务,只不过这个事务在 sql 语句执行完就结束。
所以在数据库中限制线程数,并不是限制并发的事务数,如果数据库内部在执行事务时有能力保证不阻塞执行事务的当前线程,那么在避免线程切换时只用很少的线程就能处理大量并发事务了,这时数据库的并发处理能力才是最优的。
@zhh-4096
假设 cpu 核数是 n,总任务数 > n,如果保证运行这些任务的线程不会阻塞,那么只需要启动 n 个线程就够了。压测的结果也验证了这一点,如果开启的线程数 > n,不但没有效果,反而因为线程切换有负面影响。基于这个结果,lealone 的 ClientScheduler 线程和 GlobalScheduler 线程默认都是 cpu 核数。
