[置顶] 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.

                   

         

          

你可能感兴趣的:([置顶] SQLite学习笔记(8))