同步编程
C、C#、Java 等编程语言是同步编程,不管你写什么,都将按照你的编写顺序执行。
-GET DATA FROM SQL.
//Suppose fetching data take 500 msec
-PERFORM SOME OTHER FUNCTION.
//Performing some function other will take 100 msec, but execution of other
//task start only when fetching of sql data done (i.e some other function
//can execute only after first in process job finishes).
-TOTAL TIME OF EXECUTION IS ALWAYS GREATER THAN (500 + 100 + processing time)
msec
异步
NodeJs提供了异步特性,它是非阻塞的,假设在任何I/O任务中需要花费时间(获取、写入、读取),nodejs不会保持空闲并等待任务完成,它将开始执行队列中的下一个任务,并在那个耗时的任务完成时使用回调通知。
以下示例将有所帮助:
function timeConsumingFunction(params, callback){
getDataFromSql(params, function(error, results){
if(error){
callback(error);
}
else{
callback(null, results);
}
})
}
function someOtherTask(){
console.log('Some Task 1');
console.log('Some Task 2');
}
console.log('Execution Start');
timeConsumingFunction(params, function(error, results){
if(error){
console.log('Error')
}
else{
console.log('Successfull');
}
})
someOtherTask();
简而言之,输出如下:
Execution Start
//Roughly after 105 msec (5 msec it'll take in processing)
Some Task 1
Some Task 2
//Roughly After 510 msec
Error/Successful //depends on success and failure of DB function execution
区别很明显,同步肯定需要超过600毫秒(500 + 100 + 处理时间),异步可以节省时间。
database.query()
之后使用最后插入的ID,那么我应该将其作为同步调用,对吗?还是应该采取什么方法?(这个问题我已经有很长时间了) - San