Node.js 异步I/O和异步函数之间的区别是什么?
Node.js是一个异步I/O。这实际上意味着什么 通过生成另一个线程来创建异步函数是否有不同之处 e、 g 如果存在差异,我可以在javascript中执行异步I/O吗?异步I/O (摘自维基百科) 异步I/O或非阻塞I/O是输入/输出的一种形式 允许其他处理在 传输已完成 这意味着,如果进程希望在同步调用中执行Node.js 异步I/O和异步函数之间的区别是什么?,node.js,asynchronous,Node.js,Asynchronous,Node.js是一个异步I/O。这实际上意味着什么 通过生成另一个线程来创建异步函数是否有不同之处 e、 g 如果存在差异,我可以在javascript中执行异步I/O吗?异步I/O (摘自维基百科) 异步I/O或非阻塞I/O是输入/输出的一种形式 允许其他处理在 传输已完成 这意味着,如果进程希望在同步调用中执行read()或write(),则该进程必须等待硬件完成物理I/O,以便通知它I/O操作的成功/失败 在异步模式下,一旦进程异步发出读/写I/O,系统调用将在I/O传递到硬件或在OS/V
read()
或write()
,则该进程必须等待硬件完成物理I/O,以便通知它I/O操作的成功/失败
在异步模式下,一旦进程异步发出读/写I/O,系统调用将在I/O传递到硬件或在OS/VM中排队后立即返回。因此,进程的执行不会被阻塞(因此称为非阻塞I/O),因为它不需要等待来自系统调用的结果,它将在稍后接收结果
异步功能
异步函数是通过事件处理程序(或回调函数)将数据返回给调用方的函数。可以随时调用回调函数(取决于异步函数完成所需的时间)。这与同步函数不同,同步函数将在返回值之前执行其指令
…我可以用java进行异步I/O吗
是的,JavaNIO通过提供非阻塞I/O支持。另外,是一个网络框架,它还包括非阻塞I/O。与此相关的a回答了这个问题。node.js使程序员能够通过强制使用回调来执行异步IO。现在回调类似于我们在javascript中使用了很长时间来处理DOM事件的旧异步函数! 例如 asyncIOReadFile(文件名、AsynfUncreadtheActualContent和DoSomething); log('我不知道文件中有什么') 函数asynforealContents和doSomething(文件内容){ log('现在我知道文件内容'+文件内容) } //通常,上述程序的输出如下 “我还不知道文件里有什么” //过了一段时间 '现在我知道文件内容是二进制的'
关于node.js中的异步代码,有几篇很棒的文章:
fs.readSync
您可以阅读这篇优秀的博文以获得一些见解:我正在研究相同的问题,因为这种异步IO模式对我来说是非常新的。我在infoq.com上找到了这个话题,这让我非常高兴。这家伙很好地解释了异步IO实际驻留的位置(操作系统->内核),以及如何将其嵌入node.js中,作为执行IO的主要习惯用法。享受吧 来自 同步阻塞I/O 一种简单的I/O方法是启动访问,然后等待它完成 将在通信过程中阻止程序的进程,使系统资源处于空闲状态 异步I/O 或者,可以启动通信,然后执行不需要完成I/O的处理 任何依赖于已完成的I/O的任务。。。仍然需要等待I/O操作完成,因此仍然被阻塞 但其他不依赖于I/O操作的处理可以继续 示例:
Node.js有一个事件驱动的体系结构能够进行异步I/O@绅士:所以也可以通过异步I/O执行同步功能,不是吗?@Kit Ho,当然可以!只需在网上寻找非阻塞性的例子,这可能类似于让Kit在线查找心脏手术的例子并进行操作。知道它是一回事,当你不知道你在看什么的时候试图找到它是另一回事。你想用Java还是Javascript来做这件事?您提到了节点,所以我想您需要Javascript。。。也就是说,您确实意识到Java!==Javascript,对吗?基本上,我从node.js知道术语异步i/O,只是想知道异步IO和函数之间的区别。但是node.js只是异步i/O的最新流行实现。有什么特别的东西你不明白吗?函数是一段执行任务的代码,异步I/O是一种从磁盘获取数据而不阻塞的方法。@jcolebrand:我想我现在很清楚第一个链接已经死了。这是第一个链接的正确链接吗?这是第一个链接的正确链接吗?
void asyncfuntion(){
Thread apple = new Thread(){
public void run(){
...do stuff
}
}
apple.start()
}
asyncIOReadFile(fileName, asynFuncReadTheActualContentsAndDoSomethingWithThem);
console.log('IDontKnowWhatIsThereInTheFileYet')
function asynFuncReadTheActualContentsAndDoSomethingWithThem(fileContents) {
console.log('Now I know The File Contents' + fileContents)
}
//Generally the output of the above program will be following
'IDontKnowWhatIsThereInTheFileYet'
//after quite a bit of time
'Now I know The File Contents somebinarystuff'