SQLite多线程删除问题?
测试SQLite多线程下的大批量删除操作。
使用线程数分别为3个,5个,十个和二十个,每个线程操作一个独立的数据表单,每个线程删除一万行数据。发现三个线程时,删除操作均为140毫秒左右;5个线程时,有四个线程的操作时间都是170毫秒左右,但是有一个是四千毫秒左右;十个线程时,8个线程操作时间为200毫秒左右,但是2个线程为一万毫秒左右;二十个线程时,四个线程耗时四万五千毫秒左右,其他的都是460毫秒左右!
为什么同样是删除操作,却会出现大多数线程耗时基本相同,但是少数耗时巨大!
请高手解答!!
[解决办法]
SQLite是行锁,多个线程可以并行处理,只要处理的数据不是同一行。
因为你是删除,而不是更新操作,因此最佳情况是每一个表一个线程处理。
线程数大于表数目的话,反而有线程切换的开销,效率会下降。
另外:必须在多核上执行,才有明显效果。单核上只能并发,而不能并行。