Tag: 共享内存
-
内存数据更新策略总结
因为后台线程更新数据,而前台继续服务,所以涉及数据共享的问题。 解决方案大致有以下几种: 使用读写锁 开辟两份内存,reload时来回切换 在reload的时候开辟一块内存,切换之后,等待一段时间,前台线程全部切换为新内存后,把老内存释放 方法1效率相对低下,不考虑。 方法2完全可以满足需求,并且不用担心前台线程引用到不可用的数据,如果是配置文件之类,完全没有问题,但是如果占用内存比较可观时,成本较高,可行性不高。 方法3效率高且不需要长期占用双份内存,是较好的方法,但是在实践中,还是需要注意一些问题: 读取数据的线程,需要将一个临时指针指向使用的数据(不要使用成员指针),防止在查询过程中(可能有遍历等比较费时的操作)内存被更新的问题,可能导致程序core掉。 sleep的时间尽可能长些,以等待后台线程更新内存(要考虑到如果更新线程每次是新起的话,更新间隔不能太小,如果是单一线程,就不用考虑这问题)