線程:
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.