当前位置: 首页 > 编程笔记 >

了解节点中代码执行的阻塞和解除阻塞

毕黎昕
2023-03-14
本文向大家介绍了解节点中代码执行的阻塞和解除阻塞,包括了了解节点中代码执行的阻塞和解除阻塞的使用技巧和注意事项,需要的朋友参考一下

现在,我们在fs模块中具有文件写入功能writeFileSync,如下所示-

const requestBody = [];
req.on('data', (chunks)=>{
   requestBody.push(chunks);
});
return req.on('end', ()=>{
   const parsedData = Buffer.concat(requestBody).toString();
   const username = parsedData.split('=')[1];
   fs.writeFileSync('username.txt', username);
   //重定向res.statusCode = 302; 
   res.setHeader('Location','/');
   return res.end();
});

同步表示已同步。这是一个阻塞代码示例。一旦文件写入完成,则仅对其余文件执行代码。上面的代码比较简单,但是如果我们进行大量的文件处理操作,将会导致应用性能下降。

这种代码执行方式将减慢其他请求的速度,并最终降低应用程序的性能。

解决此问题的方法是使用文件写入的异步功能。我们在异步的fs模块中有writeFile。以下是它的示例-

return req.on('end', ()=>{
   const parsedData = Buffer.concat(requestBody).toString();
   const username = parsedData.split('=')[1];
   fs.writeFile('username.txt', username, (error)=>{
      console.log(error);
   });
   //重定向res.statusCode = 302; 
   res.setHeader('Location','/');
   return res.end();
});

writeFile还有一个参数,即错误对象。如果完成文件处理功能时有任何错误,我们可以在控制台中进行检查。

这样我们可以避免代码阻塞。在文件处理中,Node js可以使用操作系统多线程方法来提供更好的性能。它只是注册事件并在以后的特定时间执行它们。

异步是在node.js中处理操作的最常用方式,例如从服务器获取数据,处理数据,分页等。

ReadFile和readFileSync -

与写入文件功能类似,我们具有读取文件功能,它们也分为阻塞和非阻塞两种方式。

readFile是非阻塞的,而readFileSync是阻塞的。我们可以使用Promise处理尚未完成的操作,但一旦完成将以一定的决心做出回应。

PromiseOperationFunction()
.then( ()=> console.log(‘completed with succes’); )
.catch((err)=> console.log(‘completed with failure’); );
 类似资料:
  • 如另一个问题中所述,当使用Undertow时,所有处理都应该在专用的工作线程池中完成,如下所示: 我知道可用于显式地告诉Undertow在专用的线程池中调度请求以阻止请求。我们可以通过将包装在实例中来修改上面的示例,如下所示: 调用此方法将exchange置于阻塞模式,并创建一个BlockingHttpExchange对象来存储流。当交换处于阻塞模式时,输入流方法变得可用,除了阻塞和非阻塞模式之间

  • 在完美的世界,将没有战争或饥饿,所有 Api 将使用异步写,阳光明媚,绿色的草地有跳来跳去的兔子和手牵手的小羊羔。 但是,现实世界并不是这样。(你看过新闻最近吗?) 事实是,大多数库,特别是在JVM的生态,Y有许多是同步API,许多的方法有可能阻塞。一个很好的例子是JDBC API - 这是本质上的同步,不管如何努力尝试,Vert.x 不能撒上魔法使之同步。 我们不打算在一夜之间把一切改写成异步,

  • 本文向大家介绍java 中同步、异步、阻塞和非阻塞区别详解,包括了java 中同步、异步、阻塞和非阻塞区别详解的使用技巧和注意事项,需要的朋友参考一下 java 中同步、异步、阻塞和非阻塞区别详解 简单点说: 阻塞就是干不完不准回来,一直处于等待中,直到事情处理完成才返回; 非阻塞就是你先干,我先看看有其他事没有,一发现事情被卡住,马上报告领导。 我们拿最常用的send和recv两个函数来说吧..

  • 问题内容: 我对如何在python / twisted中编写异步代码感到困惑。假设(出于参数考虑)我正在向世界公开一个函数,该函数将接受一个数字,如果它是质数/非质数,则返回True / False,因此它看起来像这样: (只是为了说明)。 现在,假设有一个Web服务器需要根据提交的值调用IsPrime。对于大型服务器,这将需要很长时间。 如果在此期间另一个用户要求小数的素数,是否有一种方法可以使

  • 从进程调度谈起 现代操作系统(如 Windows、Linux 等)都是分时系统。分时系统允许同时允许多个任务,但实际上,由于一台计算机通常只有一个 CPU,所以不可能真正地同时运行多个任务。这些进程实际上是轮番运行,每个进程运行一个时间片。由于时间片通常很短,用户不会感觉到,所以这些进程看起来就像是同时运行。 每个进程的时间片由操作系统完成初始化,所有进程轮番地执行相应的时间。具体下一个时间片轮到

  • 问题内容: 我有这段代码可以在Linux中从Serial读取,但是我不知道在读取SerialPort时阻塞和非阻塞之间有什么区别,在哪种情况下哪个更好? 问题答案: 您提到的代码是IMO编码和注释不当的代码。该代码不符合POSIX的可移植性惯例,如正确设置终端模式和POSIX操作系统的串行编程指南中所述。该代码没有提到它使用非规范(也称为原始)模式,并且重用了“阻塞”和“非阻塞”术语来描述 VMI