python node 性能比较好_.NET 和 Node.js 的性能比较

var http = require('http');

var fs = require('fs');

var cluster = require('cluster');

var numCPUs = require('os').cpus().length;

if(cluster.isMaster) {

// Fork workers.

for(var i = 0; i < numCPUs; i++) {

cluster.fork();

}

cluster.on('exit',function(worker, code, signal) {

console.log('worker '+ worker.process.pid +' died');

});

}

else{

http.createServer(function(request, response) {

var file = parseInt(request.url.substring(1));

file = file % 200;

file = String("000"+ file).slice(-3);

// read the file

fs.readFile('../data/input'+file+'.txt','ascii',function(err, data) {

if(err) {

response.writeHead(400, {'Content-Type':'text/plain'});

response.end();

}

else{

var results = data.toString().split("\r\n");

results.sort();

response.writeHead(200, {'Content-Type':'text/plain'});

response.end('input'+file+'.txt\t'+ results[(parseInt(results.length/2))]);

}

});

}).listen(8080,'127.0.0.1');

}

console.log('Server running at http://127.0.0.1:8080/') 最后,我们来看看.NET服务实现,确切的说我们用的是.NET 4.5版本,自带async/await功能。如我前面提到的一样,我希望用不带IIS或者ASP.NET的纯.NET来和node比较,所以我用一个简单的HTTP监听程序来开始:

publicasync Task Start()

{

while(true)

{

var context = awaitthis.listener.GetContextAsync();

this.ProcessRequest(context);

}

} 通过这个我可以开始处理各个请求,请求一进来我读取文件流系统,并没有阻塞线程池里的线程,然后执行内存排序,这是用Array.Sort重写的一个简单任务。对于.NET,在这里通过参照并行编程写的并行排序算法使得程序有了显著的性能提升,但是我没有选择这样是因为这不是这两者比较的重点。

private async void ProcessRequest(HttpListenerContext context)

{

try

{

var filename = this.GetFileFromUrl(context.Request.Url.PathAndQuery.Substring(1));

string rawData = string.Empty;

using (StreamReader reader = new StreamReader(Path.Combine(dataDirectory, filename)))

{

rawData = await reader.ReadToEndAsync();

}

var sorted = await this.SortAsync(context, rawData);

var response = encoding.GetBytes(String.Format("{0}\t{1}", filename, sorted[sorted.Length / 2]));

await context.Response.OutputStream.WriteAsync(response, 0, response.Length);

context.Response.StatusCode = (int)HttpStatusCode.OK;

}

catch(Exception e)

{

context.Response.StatusCode = (int)HttpStatusCode.BadRequest;

Console.WriteLine(e.Message);

}

finally

{

context.Response.Close();

}

}

private async Task SortAsync(HttpListenerContext context, string rawData)

{

return await Task.Factory.StartNew(() =>

{

var array = rawData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

Array.Sort(array);

return array;

});

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值