假设有这样一个需求:
我想把主线程中的数据存入数据库,但是不能造成主线程阻塞,所以我打算使用异步回调的方法,设置另一个线程中回调函数,并由它来执行写数据库操作。
这里有几个问题我不是很明白:
1.写数据库完成后,要怎样通知主线程?毕竟主线程不能采用wait()来等待...那么主线程要使用什么机制来得到“写数据库”这个操作执行完毕的信息?
2.到底啥是异步回调,一定要是多线程来实现吗?
最好能写个简单的demo或者伪代码来解释,非常感谢~
巴扎黑2017-04-17 13:49:29
呼叫寫入資料庫的方法的時候,傳入回呼函數
寫資料庫的方法被呼叫的時候會啟動另一個執行緒做真正的資料庫寫入操作,執行緒啟動後該方法立即返回。
當做資料庫寫入操作的執行緒執行完畢後,呼叫在第一步傳入的回調函數。
// 定义Callback回调函数接口
function Callback(...);
function writedb(string sql, Callback callback) {
// 创建新的线程来进行DB操作
Thread t = new Thread() {
// 更新DB
...
// 调用回调函数
callback(...);
}
t.start();
return;
}
function main() {
...
writedb(sql, new Callback(...) {
// 回调函数代码
...
});
// 其他代码,将与db操作同时进行
...
}
巴扎黑2017-04-17 13:49:29
1、我覺得你這個需求用生產者消費者模型去解決思路會比較清晰。
2、非同步回呼不一定要用到多線程,瀏覽器上的JavaScript就是個完美的單進程單線程實現非同步回呼的例子。