SQLite学习笔记(8)

前端之家收集整理的这篇文章主要介绍了SQLite学习笔记(8)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

线程:

sqlite的很多版本支持多线程。

共享缓存模型:

允许一个进程中的多个连接使用共同的页缓存。用于嵌入式服务器的情况比较多。

Thread →Server→con→Page Cache→database。

共享缓存模式中,线程依赖于服务器线程帮助管理数据库连接。线程通过某种通信机制想服务器发送sql语句,服务器使用线程分配的连接执行他们,返回结果。线程可以继续发出命令控制自己的事务,只是实际连接存在于其他线程中并有其他的线程管理。

共享缓存模式的连接使用不同的并发模型和隔离级别。注意同族连接的更改内容

读未提交隔离级别:

编译指示read_uncommited,连接就是读未提交隔离级别。

解锁通知

新版本的sqlite的包含的函数sqlite3_unlock_notify();

声明:

int sqlite3_unlock_notify(

sqlite3 * pBlocked,/*等待的连接*/

void (* xNotify ) (void **apArg,int nArg) /*要触发的回调函数*/

void *pNotifyArg /*传递给xNotify 的参数*/

);

如果因为代码竞争没有获得共享锁,那么将要返回sqlITE_LOCKED;此时调用函数sqlite3_unlock_notify(),在阻塞连接上(第一个参数)上注册回调函数XNotify;

回调函数可以有任何参数。

拥有阻塞锁的连接将会触发xNotify回调,作为完成事务的sqlite3_step( )或者sqlite3_close()的一部分。多线程调用sqlite3_unlock_notify()时,事务可能已经完成了。此时,回调函数将会从sqlite3_unlock_notify()内初始化。每个阻塞连接上只会有一个注册解锁/通知回调函数;不可重入,回调函数中应咩有其他函数调用;使用Drop的时候,可能会出差错。

线程与内存管理:

与内存管理相关联的函数(指定堆的大小、限定堆栈):

void sqlite3_soft_heap_limit(int N) ; 将软堆设置为N字节。如果使用的内存超过了N,将会调用下一个函数sqlite3_release_memory(int N),返回实际释放的字节数。

int sqlite3_release_memory(int N);

默认这些函数是空操作,除非编译sqlite时,启动预处理命令指令:sqlITE_ENABLE_MEMORY_MANAGENENT.

原文链接:https://www.f2er.com/sqlite/201760.html

猜你在找的Sqlite相关文章