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

1 篇文章 0 订阅
1 篇文章 0 订阅

项目使用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个人没什么压力.

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值