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”