通過同步和非同步的對比,我們來看下nodejs是如何處理一些非同步呼叫的。下面是nodejs**:
'use strict';
const fs = require('fs');
// 模擬非同步
console.time('setout');
settimeout(function
(),0);
setimmediate(function
())process.nexttick(function
())// 用於阻塞主線程
for(var i=0;i<10000000;i++){}
console.log('for迴圈之後');
// 非同步讀取檔案
fs.readfile('./1.txt','utf8',function
(err,data)
fs.writefile('./11.txt',data,'utf8',function
(err)
console.log('非同步讀取完成');
})})// 同步讀取檔案
fs.readfilesync('./1.txt');
console.log('同步讀取檔案結束');
其執行結果是:
for迴圈之後總結:同步讀取檔案結束
process.nexttick
setout: 15.483ms
setimmediate
非同步讀取完成
雖然**是從上到下依次執行,但是遇到有非同步操作的時候,就會把非同步操作放入事件佇列中進行事件迴圈。同步操作會在主線程上進行,雖然同步讀取檔案被放到了**的最後,但是從結果看還是提前執行。同時,非同步中的
process.nexttick()
操作,優先順序最高,它會優先被執行。
用小例子來解釋svn switch的使用
svn switch 的作用,不大好講清楚。用語言描述起來是 switch命令只是update命令的乙個超集。svn switch和svn update兩個命令唯一區別就是update會一直比較同一路徑。換名話說,update通過時間移動你的工作拷貝,switch通過時間和空間移動工作拷貝。本文的例...
用乙個簡單的例子來理解python高階函式
用乙個簡單的例子來理解python高階函式 最近在用mailx傳送郵件,寫法大致如下.echo body mailx s title a corp.com,b corp.com 不知什麼原因,在一台機器上只要mailto中包含空格,郵件就傳送不出去.所以需要對收件人做規範化處理,即去除空格,去除多餘...
override與new 用兩個小例子來解釋
例一 class program public class a5 public virtual void methodb public class b5 a5 例二 class a public virtual void aa class b a public override void aa 將這...