Java背景下的节点思考
我是一名Java开发人员,在这里,一切都以顺序方式(或与多个线程并发)一个接一个地工作。按顺序排列是合乎逻辑的。 但节点以单线程的并发顺序工作。即使它只在单线程上工作,它又有什么好处呢 坦白地说,我没有在节点中得到单线程的概念。只有一条线可以处理一切Java背景下的节点思考,java,javascript,node.js,asynchronous,Java,Javascript,Node.js,Asynchronous,我是一名Java开发人员,在这里,一切都以顺序方式(或与多个线程并发)一个接一个地工作。按顺序排列是合乎逻辑的。 但节点以单线程的并发顺序工作。即使它只在单线程上工作,它又有什么好处呢 坦白地说,我没有在节点中得到单线程的概念。只有一条线可以处理一切 任何关于如何开始在node中思考的建议都是有益的。这已经说过无数次了,但让我给你一个关于Java的简短回答 如果您想在不阻塞主线程的情况下读取长文件,可以在Java中创建单独的线程 在Javascript中,您只需使用回调读取文件 这两者之间的主要
任何关于如何开始在node中思考的建议都是有益的。这已经说过无数次了,但让我给你一个关于Java的简短回答 如果您想在不阻塞主线程的情况下读取长文件,可以在Java中创建单独的线程 在Javascript中,您只需使用回调读取文件 这两者之间的主要区别是:
有时,您还必须使用Javascript进行计算密集型工作。在这种情况下,您可以生成一个新的流程-查看模块。但通常,计算或I/O繁重的操作已经为您完成,您只需使用回调就可以使用它们。好吧,让您有一个领先的开始。它不是关于线程,而是关于每秒的任务。在线程模式中,线程在等待某些内容时会阻塞 在非阻塞设计中,每当您等待某件事情时,您只需返回线程,并在等待的事件发生时被唤醒。这些事件被称为未来。所以在将来,我想在发生这种或那种情况时做这件事(或者在失败的情况下做另一件事)。基本上就是这样 它不是节点或javascript。它也以scala而闻名,当然还有很多其他语言。如果您是Java爱好者,请寻找异步处理。码头提供了它。Vertx以无共享架构而闻名 祝你玩得开心。我经常使用它。我有一个服务器,在自定义数据存储中存储20GB的数据。想知道我们是怎么做到的吗?我们为服务器带来了512GB,其中20个存储并行运行,不共享任何内容。这就像在一台机器上有20台服务器,没有明显的延迟,并且可以通过核心进行扩展。这就是我们在当今世界做生意的方式
硬件很便宜,为什么要在最底层处理并发呢?同步编程(Java) 如果您熟悉Java或.Net之类的同步编程(编写完成一件又一件事情的代码)。以下面的代码为例, 例如:
var fs = require('fs');
var content = fs.readFileSync('simpleserver1.js','utf-8');
console.log('File content: ');
console.log(content);
它将简单web服务器的代码写入控制台。代码按顺序工作,在下一行之后执行每一行。在前一行完成执行之前,不会执行下一行
虽然这很有效
如果本例中的文件非常大,需要几分钟的时间怎么办
阅读
当代码或代码很长时,如何执行其他操作
操作正在运行?
如果您使用java,则不会出现这些问题,因为您有许多线程要为您工作(以服务多个请求)
异步编程(Node.Js) 但当您使用节点时,您只有一个线程,它服务于所有请求 因此,异步编程应运而生,可以帮助您使用javascript(节点) 为了在其他长操作运行时执行操作,我们使用
函数回调
。下面的代码显示了如何使用异步回调函数:
var fs = require('fs');
fs.readFile('simpleserver1.js','utf-8', function(err,data){
if (err) {
throw err;
}
console.log(“executed from the file finishes reading”);
});
//xyz operation
请注意,“从文件执行完成读取”行是在读取文件时执行的,因此允许我们在执行文件的主读取时执行其他操作
现在查看代码中的//xyz操作
。读取文件时,服务器不会等待文件被完全读取。它将开始执行//xyz操作
,并在文件准备就绪时返回到fs.readFile(
)中提供的回调函数
这就是异步编程在节点中的工作方式
如果您想比较java和Node,也可以阅读以下内容
编辑: node.Js单线程如何 让我们看一个场景,其中客户端请求服务器: 假设: 1) 有一个服务器进程,比如说
serverProcess
2) 有两个客户端请求服务器,例如clientA
和clientB
3)现在考虑Cclipse,将需要一个文件操作(作为一个) 如上所示,使用
fs
)
这里发生了什么
流量:
1) clientA
请求serverProcess
,服务器获取请求,然后
它开始执行文件操作。现在,它等待文件被删除
准备读取(尚未调用回调)
2) clientB
请求serverProcess
,现在服务器是自由的了
现在,由于它不服务于clientA
,因此它在
同时,来自fs.read
的回调通知服务器该文件
数据准备就绪,可以对其执行操作
3) 现在服务器开始为“clientA”服务
现在你看,只有一个服务器线程,它处理两个客户端请求,对吗?
如果这是JAVA,那么会发生什么呢?您会创建另一个服务器线程来服务
clientB