之前做过测试,开发http应用时,输出buffer比输出string性能要高几倍,几乎和nginx媲美。但是,在代码中不得不把要输出的string都一一转化为buffer,调用var buf = new Buffer(str);,我的疑问是每次这样的转化是需要cpu计算的,那么在高并发应用时,cpu是不是就会是瓶颈?
我對你的測試結果表示懷疑,除非整個過程都是在操作 Buffer 完全不涉及 string,否則輸出 string 和轉化爲 Buffer 的 string 效率應該是一樣的。因爲從內部實現考慮最終輸出只能是 Buffer ,輸出 string 只不過是隱式轉換了而已。
調用 var buf = new Buffer(str); 會有 CPU 操作,因爲涉及到了編碼轉換,默認是 UCS2 轉換爲 UTF8 。不過就算你不調用,系統也會在內部幫你調用的。
var cluster = require(‘cluster’);
var http = require(‘http’);
var cpunum = require(‘os’).cpus().length;
var str = '’;
// 生成100k数据
for(var i=0; i<1024*100; i++){
str += 'a’;
}
console.log(str.length);
var str = new Buffer(str);//测试string时,把这句删掉
if(cluster.isMaster){
for(var i=0; i < cpunum; i++)
cluster.fork();
}else{
http.Server(function(req, res){
console.log(‘a’);
res.end(str);
}).listen(9000);
}
这是代码,很简单