Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js非阻塞IO与使用NIO的java线程池模式。不清楚的调度行为_Java_Node.js_Asynchronous_Scheduled Tasks_Nio - Fatal编程技术网

Node.js非阻塞IO与使用NIO的java线程池模式。不清楚的调度行为

Node.js非阻塞IO与使用NIO的java线程池模式。不清楚的调度行为,java,node.js,asynchronous,scheduled-tasks,nio,Java,Node.js,Asynchronous,Scheduled Tasks,Nio,请帮助我了解使用NIO的线程池模式的缺点 我发现了这个问题:但它并没有回答NIO如何影响java中的调度行为 我如何理解Node.js和java.IO: Node.js将事件循环和非阻塞IO与回调结合使用。这允许在IO调用未完成时处理其他任务,如下所示: 使用旧的java.IO库和线程池模式,java线程将被阻塞,直到IO操作完成。同时,线程不能处理其他任务,不能进行调度 但是现在我们认为有一个带有最大10线程的线程池。 每个线程都作为Runnable对象获得一些作业 那么,如果需要长期IO操

请帮助我了解使用NIO的线程池模式的缺点

我发现了这个问题:但它并没有回答NIO如何影响java中的调度行为

我如何理解Node.js和java.IO:

Node.js将事件循环和非阻塞IO与回调结合使用。这允许在IO调用未完成时处理其他任务,如下所示:

使用旧的java.IO库和线程池模式,java线程将被阻塞,直到IO操作完成。同时,线程不能处理其他任务,不能进行调度

但是现在<关于NIO?< /强>我们认为有一个带有最大10线程的线程池。 每个线程都作为
Runnable
对象获得一些作业

那么,如果需要长期IO操作,会发生什么情况呢。我不相信在初始IO调用完成之前,当前撤消的
Runnable
将被其他替换


那么,与
java.IO
相比,java中的调度行为到底是如何发生变化的呢?

本质上,NIO提供了编写与node.js类似的单线程事件循环的方法。相比之下,JavaIO没有提供这样的方法

实现可能有所不同,但本质上,您可以创建一个线程,该线程读取并执行每个成功选择的一些注册回调。然后,对于每一种新的IO,您可以使用相同的选择器注册它的通道(或任何东西),并以这种方式实现100%相同(但更灵活)的单线程回调事件循环实现。NIO本身并没有提供这样的事件循环或类似的东西,如果您是这样要求的话

值得注意的是,NIO背后的实现因底层基础设施的不同而有所不同。例如,在POSIX系统中使用NIO写入文件将转换为本机操作系统调用,而运行一个只阻塞IO的操作系统将使Java为每个IO创建一个单独的线程,以实现向后兼容性(因为从技术上讲,没有其他方法可以实现NIO)


我希望这能回答您的问题,这个问题有点模糊。

Node.js使用asyn IO的
libuv
库,我可以向您保证libuv使用线程池。@DavidHaim是的,我知道。我只是想知道java.NIO的调度是如何工作的。是否阻塞线程。