Tag: 非阻塞

Node.js – 用睡眠模拟一个I / O

我的目标是通过node.js演示一个非阻塞代码的强大function,所以我尝试用sleep语句模拟一个I / O事件,但是我的努力仍然失败: var http = require('http'); var url = require('url'); http.createServer(function (request, response) { response.writeHead(200, {'Content-Type': 'text/plain'}); if( url.parse(request.url).pathname == '/wait' ){ var startTime = new Date().getTime(); while (new Date().getTime() < startTime + 15000); response.write('Thanks for waiting!'); } else{ response.write('Hello!'); } response.end(); }).listen(8080); console.log('Server started'); 当我在http:// localhost:8080之后访问http:// localhost:8080 / wait时 ,两者都在等待循环。 有小费吗?

如何在nodejs中添加数以百万计的数字而不会阻塞进一步的执行?

我正试图在节点js中实现一个问题的解决scheme,即: 例如: Ur是: http:// localhost / sum / 5 应该返回 “从1到5的数字之和是:15” 如果 url: http:// localhost / sum / 100 答案应该是: “从1到100的数字总和是:4950” 参数可以是巨大的: 例如: url: http:// localhost / sum / 100000000 (千万) 在任何时候,服务器都不应该只处理一个请求。 我读了某处setImmediate可能会有所帮助。

Node.js的 混淆了非阻塞的方法

好吧,似乎我很难开始思考..嗯..function的方式..或asynchronous的方式。 我对node.js比较陌生,但是我有很多年的C#,java,c ++经验。 图片我有简单的任务。 这个任务的想法是每一行都应该在上一行完成之后执行(阻塞操作)。 正常的做法,让我说,C#。 此外,(这是这篇文章的原因)让我们想象我们在我们的代码中有一条条件线。 这个伪代码如下: f = OpenFile("aaa.txt") If f.ReadLine(1) == "bbb" // read the first line line = f.ReadLine(2) // read the second line else line = ReadLine(3) // read the third line DataBase.Insert(line) // store the line in some database, lets say in mysql DeleteFile(f) 很简单。 现在,据我所知,node.js通过向几乎每个函数添加callback来使用非阻塞方法。 这样,这个简单的任务似乎成了我的噩梦。 如果我尝试重现上面的代码,它将如下所示: OpenFile(f, […]

你如何编写非阻塞模块?

从完全不同的背景来看,Node.js的工作方式对我来说仍然是一个非常陌生的概念。 我正在掌握在你的函数中使用callback的概念 ,但是当我试图支持模块化开发,并因此更好地扩展时,实际上很难实现这一点。 例如,我将如何返回一个函数的结果回到我的代码,或者说,而不是阻止访问? 我一直在阅读,但是我不能把这个事情做完,因为每个人都给我一个不同的答案。 以一个日志function,例如: exports.log = function (req, res, type) { // do stuff here } 提前致谢。

如何在node.js中使非IO操作同步与asynchronous?

我知道这个标题听起来像是十几个其他问题,可能是这样。 不过,我已经阅读了十几个问题,并search了一下,发现没有什么能够回答这些问题让我满意。 这可能是因为没有人正确回答,在这种情况下,你应该投票给我。 这可能是因为我很愚蠢,不了解其他答案(更可能),在这种情况下,你应该投我一票。 语境: 我知道Node.js中的IO操作被检测到,并且默认情况下是asynchronous运行的。 我的问题是关于仍然可能阻塞/运行很长时间的非IO操作。 假设我有一个for循环的函数blockingfunction函数,它可以增加或不增加(纯CPU周期,无IO),还有很多。 运行需要一分钟或更长时间。 说我希望这个function运行,只要有人向我的服务器发出特定的请求。 题: 很明显,如果我在代码的外层显式调用这个循环,所有东西都会阻塞,直到完成。 我读过的大部分build议都build议先启动所有其他处理程序/服务器等,然后通过process.nextTick或setTimeout(blockingfunction, 0)推迟函数的调用。 但是不会blockingfunction1然后只是阻止下一个周围的执行循环? 我可能是错的,但似乎这样做会启动所有我的其他东西,而不会阻止应用程序,但是当第一次有人提出请求导致blockingfunction被调用时,所有东西都会阻塞,只要它完成。 在setTimeout或process.nextTick调用中,是否将blockingfunction setTimeout与未来的操作共存,而不会阻塞它们? 如果没有,有没有办法使blockingfunctionfunction,而不重写它? 别人怎么处理这个问题呢? 我见过的很多答案都是“只要相信你的CPU密集的东西要快,它们就会”,但是这并不能令人满意。 缺less线程(在那里我可以保证,执行blockingfunction将与执行其他任何正在进行的交错),我应该重新编写CPU密集型/耗时循环使用process.nextTick来执行一个固定的,有保证的每个滴答快速的迭代次数?

阻止代码是否总是使用返回语句和非阻塞代码总是使用callback?

在初学者教程中,Node的非阻塞性质通常通过显示阻塞的例子(使用return语句)和非阻塞的Node例子(使用callback)来演示。 有关示例,请参阅此处 。 我应该把它作为一个“气味”,使用return在我的节点应用程序中创build阻止代码,并find一种方法来使用callback重做它?

在node.js和erlang vm中调用一个阻塞库

在node.js中,如果我的线程调用了一个阻塞库,它将不能接受任何更多的请求,直到它从库中取回响应。 这与Erlang虚拟机的情况是否一样 – 也就是说,如果其中一个进程调用阻塞库,其他进程是否可以继续接受请求?

如何通过mongoose非阻塞获取大数据?

我如何通过mongoose获得大量的收集,我得到的每一个文件返回,而不是整个集合的巨大数组? 目前我只使用以下查询: var query = templateData.find({}); query.exec(function (err, docs) { // docs as array }); 这样,查询function就像阻塞IO而不是非阻塞。 有没有办法让这个更无阻塞?

我对节点中的“非阻塞”的理解是否正确?

人们有时会把下面的callback模式称为asynchronous。 function beAsync(msg, cb){ cb(msg); } beAsync("a", function(msg){ console.log(msg); }); console.log("b"); 什么人有时会说beAsync允许其余的代码运行,然后callback发生在准备就绪时。 当我最初调用beAsync和真正的asynchronous函数(如fs.readFile ,必须有一些代码同步运行, 然后发生了一些事情 ,允许readFile代码允许其余的代码被允许运行。 我正确地说,代表callback的东西进入一个低于JavaScript的循环吗? 所以beAsync的修改将包括一个setTimeout。 function beAsync(msg, cb){ setTimeout( function(){ cb(msg) }, 1); } 所以setTimeout和readFile的内部可以讲一个JavaScript所在的层? 说到这个低层是在JavaScript中实现非阻塞代码的唯一方法?

Node.js,进程和线程的问题

进程是否至less有一个线程正在运行? 如果是这样,那么Node.js将默认有1个主线程和1个事件循环线程运行?