多线程或多进程使用sqlite的问题.

项目使用sqlite本地数据库作为一些列内容的配置文件.用法很简单.而且都是只读.版本是 3.5.6

封装后使用了3年下来也没什么问题.不过这次压力测试的时候.Room承载一上2000.不一会就当了.

 

在房间服务器的应用中.设计时将每个房间设计为一个独立的RoomApp.一个进程开启多个线程.每个线程上跑多个RoomApp.

这样的好处是每个房间独立.一个当了不影响其他的.

本来在数据上应该做些全局的Cache.因为读取的文件都很小.也还没没遇到性能瓶颈.就一直没做.

 

不过这次压力测试发现.多个线程使用同一个sqlite数据库文件时就会有问题.

刚开始以为是sqilite3_open()接口打开文件开了FILE_SHARE_WRITE.

后来用sqlite3_open_v2()接口设置了只读.也还是有问题.

 

这里必须说清楚.设计时我们确实考虑到了sqlite的多线程安全问题.但我们的设计是每个RoomApp都会建立一个sqlite连接.重新打开一遍db文件.并没有共享一个sqlite.而且也设置了windows的IO限制.照例说不该有问题..

 

做了个测试程序.发现只要多个线程一起不停的读.就当了.debug版似乎不会当.release当的很爽快.估计是sqlite内部哪里的同步出问题了.

相信同时开启多个进程这么用也会有问题.不过一般开不到那么多的进程(600+).

 

于是将服务器端的数据都做了下全局Cache.就正常了.目前跑到3000个人没什么压力.

 

 

 

你可能感兴趣的:(C++,SQLITE,多线程)