asynchronousI / O和asynchronous函数有什么区别?
Node.js是一个asynchronousI / O。 这实际上是什么意思?
我通过产生另一个线程来创build一个asynchronous函数有什么不同之处呢?
例如
void asyncfuntion(){ Thread apple = new Thread(){ public void run(){ ...do stuff } } apple.start() }
如果有差异,我可以在JavaScript中做一个asynchronousI / O?
asynchronousI / O
asynchronousI / O (来自Wikipedia)
asynchronousI / O或非阻塞I / O是input/输出处理的一种forms,在传输完成之前允许其他处理继续。
这意味着,如果一个进程想要在同步调用中执行read()
或write()
,则进程必须等到硬件完成物理I / O,以便能够通知成功/ I / O操作失败。
在asynchronous模式下,一旦进程asynchronous发出读/写I / O,一旦I / O传递给硬件或在OS / VM中排队,系统调用立即返回。 因此,进程的执行不会被阻塞(因此为什么称为非阻塞I / O),因为它不需要等待系统调用的结果,它将在稍后接收结果。
asynchronousfunction
asynchronous函数是一种通过事件处理函数 (或callback函数 )将数据返回给调用者的函数 。 callback函数可以随时调用(取决于asynchronous函数完成需要多长时间)。 这与同步函数不同,后者将在返回值之前执行其指令。
…我可以做一个asynchronousI / O在Java中?
是的,Java NIO通过Selector提供了非阻塞I / O支持。 此外, Apache MINA是一个networking框架,也包含非阻塞I / O。 一个相关的SO问题回答了这个问题。
关于node.js中的asynchronous代码,有几篇很棒的文章:
- 使用Node.js进行asynchronous代码devise
- 了解事件驱动的编程
- 了解事件循环并为Node.js编写出色的代码
除了@The Elite Gentleman的回答,节点不会为asynchronousI / O函数产生线程。 节点下的所有东西都在单线程事件循环中运行 。 这就是为什么避免某些I / O函数的同步版本非常重要,除非绝对必要,比如fs.readSync
你可以阅读这个优秀的博客文章的一些见解: http : //blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
我正在调查同样的问题,因为这个asynchronousIO模式对我来说是非常新的。 我在infoq.com上发现了这个话题,这让我很开心。 这个家伙很好地解释了asynchronousIO实际驻留的地方(操作系统 – >内核),以及如何将它embedded到node.js中作为执行IO的主要习惯用法。 请享用!
http://www.infoq.com/presentations/Nodejs-Asynchronous-IO-for-Fun-and-Profit
node.js允许程序员通过强制使用callback来执行asynchronousIO。 现在callback类似于我们已经使用很长时间来处理javascript中的DOM事件的旧的asynchronous函数! 例如
asyncIOReadFile(fileName,asynFuncReadTheActualContentsAndDoSomethingWithThem); 的console.log( 'IDontKnowWhatIsThereInTheFileYet') 函数asynFuncReadTheActualContentsAndDoSomethingWithThem(fileContents){ console.log('现在我知道文件内容'+ fileContents) } //通常以上程序的输出如下 'IDontKnowWhatIsThereInTheFileYet' //相当一段时间后 “现在我知道文件内容somebinarystuff”
- 我想使用nodejs使CLI程序asynchronous
- 需要帮助相关的asynchronous函数执行stream程(await,promises,node.js)
- NodeJS队列asynchronous函数
- 如何处理需要两个asynchronous方法的node / express的请求
- Node.js,在继续执行之前等待所有的Redis查询完成
- async.parallel是否也会阻塞代码?
- NodeJS获取和传递variables
- asynchronous/等待try / catch在处理逻辑等待解决后不显示错误
- 在所有调用都是asynchronous的情况下,如何在lambda中构build连续的AWS服务调用?