Python中文
首页
教程
问答
标签
搜索
登录
注册
Node.js性能与zeromq对比Python与J
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我使用node.js、Python和Java为zeromq编写了一个简单的echo请求/应答测试。代码运行一个100K请求的循环。该平台是一个5yo MacBook Pro,2核,3G内存运行雪豹。</p> <p>js始终比其他两个平台慢一个数量级。</p> <p>爪哇语: <code>real 0m18.823s user 0m2.735s sys 0m6.042s</code></p> <p>Python: <code>real 0m18.600s user 0m2.656s sys 0m5.857s</code></p> <p>node.js号: <code>real 3m19.034s user 2m43.460s sys 0m24.668s</code></p> <p>有趣的是,对于Python和Java,客户机和服务器进程都使用大约一半的CPU。node.js的客户机只使用大约一个完整的CPU,而服务器使用大约30%的CPU。客户端进程也有大量的页面错误,导致我认为这是内存问题。而且,在10K请求时,node的速度只慢了3倍;它运行的时间越长,速度肯定慢得越多。</p> <p>下面是客户端代码(注意process.exit()行也不工作,这就是为什么除了使用time命令之外,我还包含了一个内部计时器):</p> <pre><code>var zeromq = require("zeromq"); var counter = 0; var startTime = new Date(); var maxnum = 10000; var socket = zeromq.createSocket('req'); socket.connect("tcp://127.0.0.1:5502"); console.log("Connected to port 5502."); function moo() { process.nextTick(function(){ socket.send('Hello'); if (counter < maxnum) { moo(); } }); } moo(); socket.on('message', function(data) { if (counter % 1000 == 0) { console.log(data.toString('utf8'), counter); } if (counter >= maxnum) { var endTime = new Date(); console.log("Time: ", startTime, endTime); console.log("ms : ", endTime - startTime); process.exit(0); } //console.log("Received: " + data); counter += 1; } ); socket.on('error', function(error) { console.log("Error: "+error); }); </code></pre> <p>服务器代码:</p> <pre><code>var zeromq = require("zeromq"); var socket = zeromq.createSocket('rep'); socket.bind("tcp://127.0.0.1:5502", function(err) { if (err) throw err; console.log("Bound to port 5502."); socket.on('message', function(envelope, blank, data) { socket.send(envelope.toString('utf8') + " Blancmange!"); }); socket.on('error', function(err) { console.log("Error: "+err); }); } ); </code></pre> <p>为了进行比较,Python客户机和服务器代码:</p> <pre><code>import zmq context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect("tcp://127.0.0.1:5502") for counter in range(0, 100001): socket.send("Hello") message = socket.recv() if counter % 1000 == 0: print message, counter import zmq context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://127.0.0.1:5502") print "Bound to port 5502." while True: message = socket.recv() socket.send(message + " Blancmange!") </code></pre> <p>以及Java客户机和服务器代码:</p> <pre><code>package com.moo.test; import org.zeromq.ZMQ; import org.zeromq.ZMQ.Context; import org.zeromq.ZMQ.Socket; public class TestClient { public static void main (String[] args) { Context context = ZMQ.context(1); Socket requester = context.socket(ZMQ.REQ); requester.connect("tcp://127.0.0.1:5502"); System.out.println("Connected to port 5502."); for (int counter = 0; counter < 100001; counter++) { if (!requester.send("Hello".getBytes(), 0)) { throw new RuntimeException("Error on send."); } byte[] reply = requester.recv(0); if (reply == null) { throw new RuntimeException("Error on receive."); } if (counter % 1000 == 0) { String replyValue = new String(reply); System.out.println((new String(reply)) + " " + counter); } } requester.close(); context.term(); } } package com.moo.test; import org.zeromq.ZMQ; import org.zeromq.ZMQ.Context; import org.zeromq.ZMQ.Socket; public class TestServer { public static void main (String[] args) { Context context = ZMQ.context(1); Socket socket = context.socket(ZMQ.REP); socket.bind("tcp://127.0.0.1:5502"); System.out.println("Bound to port 5502."); while (!Thread.currentThread().isInterrupted()) { byte[] request = socket.recv(0); if (request == null) { throw new RuntimeException("Error on receive."); } if (!socket.send(" Blancmange!".getBytes(), 0)) { throw new RuntimeException("Error on send."); } } socket.close(); context.term(); } } </code></pre> <p>我很喜欢node,但是由于代码大小、简单性和性能的巨大差异,在这一点上我很难说服自己。</p> <p>那么,以前有没有人见过这样的行为,或者我在代码中做了什么愚蠢的事情?</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>这是节点的zeroMQ绑定的问题。 我不知道从什么时候开始,但它是固定的,你得到的结果和其他语言一样。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
使用Python创建一个非常大的二进制频率矩阵来运行协作过滤
7 回答
使用Python创建一张HTML网页,其中在不同颜色中重复n遍显示“Hello World”的方法
3 回答
使用Python创建一组唯一的值length L
7 回答
使用python创建不同表格的透视表
2 回答
使用python创建不和谐频道
5 回答
使用python创建不存在的多个文件夹
1 回答
使用python创建串行远程文件
4 回答
使用python创建交互式仪表板时出现问题
4 回答
使用python创建交互式绘图
8 回答
使用python创建交互式自动电子邮件
3 回答
使用Python创建价格列表
2 回答
使用python创建修改的txt文件
6 回答
使用Python创建全局变量,初始化后更改值
3 回答
使用Python创建关键字搜索词数组
10 回答
使用Python创建具有不均匀块大小/堆叠条形图的热图
8 回答
使用Python创建具有依赖于另一列的值的列
5 回答
使用Python创建具有多列的HTML表
7 回答
使用Python创建具有时间范围数据的等距数据帧
4 回答
使用Python创建具有特定顺序或属性的XML文件
4 回答
使用Python创建具有级联功能的搜索栏
8 回答