Articles of 非阻塞

如果一个Web服务器是非阻塞的,这是否意味着它正在处理与node.js相同的IO?

我将很快使用一个名为Undertow的服务器。 该网站说: Undertow是一个用java编写的灵活的高性能Web服务器,提供基于NIO的阻塞和非阻塞API 如果Undertow允许非阻塞,那和node.js是一样的吗? 我不是指语言或其他类似的东西。 我有一个单独的项目,我认为node.js将是一个不错的select,但如果我可以使用单个产品的多个项目,这将是有益的。 编辑:我发现这个问题。 Java的NIO非阻塞模式vs node.jsasynchronous操作我开始认为我有困惑的事情。

如何阅读与node.js或JavaScript文件的行延迟,而不是在非阻塞行为?

我在node.js中读取一个文件(300,000行)。 我想要批量发送5000行的行到另一个应用程序(Elasticsearch)来存储它们。 所以每当我读完5000行时,我想通过一个API将它们批量发送给Elasticsearch,然后继续阅读文件的其余部分,每批发送5000行。 如果我想要使用java(或任何其他阻塞语言,如C,C ++,python等)来完成这个任务,我会这样做: int countLines = 0; String bulkString = ""; BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("filePath.txt"))); while ((currentLine = br.readLine()) != null) { countLines++; bulkString += currentLine; if(countLines >= 5000){ //send bulkString to Elasticsearch via APIs countLines = 0; bulkString = ""; } } 如果我想用node.js做同样的事情,我会做: var countLines = 0; var bulkString […]

单个请求花费很长时间处理这些非阻塞的io服务器时会发生什么情况?

使用nodejs或eventlet或任何其他非阻塞服务器,当给定的请求花费很长时间会发生什么,然后阻塞所有其他请求? 例如,请求进来,需要200ms计算,这将阻止其他请求,因为例如nodejs使用单个线程。 意思是每秒钟15K的时间将大大减less计算响应给定请求所花费的实际时间的b / c。 但是这对我来说似乎是错误的,所以我在问真正发生的事情,因为我无法想象事情是如何运作的。

NodeJs如何创build一个非阻塞计算

我试图让我的头在nodejs中创build一个无阻塞的重计算块。 拿这个例子(剥离其他东西): http.createServer(function(req, res) { console.log(req.url); sleep(10000); res.end('Hello World'); }).listen(8080, function() { console.log("ready"); }); 你可以想象,如果我同时打开2个浏览器窗口,第一个将等待10秒钟,另一个将按照预期等待20个。 所以,知道一个callback以某种方式asynchronous的武装,我删除了睡眠,并把这个: doHeavyStuff(function() { res.end('Hello World'); }); 与function简单定义: function doHeavyStuff(callback) { sleep(10000); callback(); } 这当然是行不通的…我也试图定义一个EventEmitter并注册它,但发射器的主要function有发射'完成'之前的睡眠,例如,所以一切都将运行阻止。 我在这里想知道其他人如何编写非阻塞代码…例如,mongojs模块或child_process.exec是非阻塞的,这意味着在代码中的某个地方,它们在另一个线程上分叉进程并听取其事件。 我怎样才能复制这个例如有一个漫长的过程呢? 我完全误解了nodejs范式吗? :/ 谢谢! 更新:解决scheme(有点) 感谢对Linus的回答,的确,唯一的办法是产生一个subprocess,比如另一个节点脚本: http.createServer(function(req, res) { console.log(req.url); var child = exec('node calculate.js', function (err, strout, strerr) { console.log("fatto"); res.end(strout); }); }).listen(8080, function() […]

如何在Node.js中无限读取

while(1){ rl.question("Command: ",function(answer){ console.log(answer); }) } 刚刚试过这个代码,而是一个接一个的input,它闪烁“Command:”行。 我知道node.js是非阻塞的,但我不知道如何解决这个问题。

node.js中的额外stdiostream是否被child_process.spawn阻塞?

当使用spawn()创buildsubprocess时,您可以通过options.stdioparameter passing选项来创build多个stream。 在标准3(stdin,stdout,stderr)之后,你可以传递额外的stream和pipe道,这将是subprocess中的文件描述符。 然后你可以使用fs.createRead / WriteStream来访问这些。 请参阅http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options var opts = { stdio: [process.stdin, process.stdout, process.stderr, 'pipe'] }; var child = child_process.spawn('node', ['./child.js'], opts); 但是这些文件并不清楚这些pipe道堵塞的位置。 我知道标准input/标准输出/标准错误阻塞,但'pipe'呢? 一方面他们说: “请注意,父级和子级上的send()方法是同步的 – 不build议发送大块数据(可以使用pipe道,请参见child_process.spawn” 但在别处他们说: process.stderr和process.stdout不同于Node中的其他stream,写入它们通常是阻塞的。 They are blocking in the case that they refer to regular files or TTY file descriptors. In the case they refer to pipes: They […]

非阻塞(事件驱动的I / O)与阻塞I / O

最近我偶然发现了一个名为nodeJS的漂亮的JS库,它就像服务器端的JS一样。 语言的主要特点是使用I / O,它使I / O的固有容量完全无阻塞使用callback! 我的问题是,如果这种完全不阻塞的I / O机制过去存在(给定事件驱动的I / O已经存在很长时间了),为什么它们在C#和高级语言Java(尽pipeJava有支持非阻塞I / O的NIO实现)? 目前,简单的文件读/写操作导致完全的I / O阻塞,事件驱动的I / O不是这种情况。 我想更好地理解事件驱动的I / O,以及它与我们在Java中的不同之处。

为什么这个JavaScript在Node.js中阻塞?

我有以下简单的http服务器使用Node.js: var http = require('http'); var server = http.createServer(function(req, res) { var counter = 0; for(var i = 1; i <= 30; i++) { http.get({ host: "www.google.com" }, function(r) { counter++; res.write("Response " + counter + ": " + r.statusCode + "\n"); if(counter == 30) res.end(); }); } }); server.listen(8000); 当我卷入8000端口的本地主机时,我确实得到了预期的结果: Response 1: 200 Response […]

node.js如何实现非阻塞I / O?

从这里我发现node.js实现了非阻塞的I / O模型。 但我不明白如何。 由于JavaScript是单线程的。 单个线程如何执行I / O操作并同时执行进一步的过程。

Node.JS中的单线程事件循环与multithreading非阻塞工作程序

Node.JS最大的优点是它的非阻塞性质。 它是单线程的,所以它不需要为每个新的传入连接产生一个新的线程。 事件循环(事实上是单线程)的后面,有一个“非阻塞工作者”。 这个东西不再是单线程的,所以(就我所知),它可以为每个任务产生一个新的线程。 也许我误解了一些东西,但究竟是什么优势。 如果需要处理很多任务,那么不会将非阻塞工作变成阻塞工作者吗? 感谢基督徒