当前位置: 首页 > 面试题库 >

Node.js和互斥体

邰昀
2023-03-14
问题内容

我想知道Node.js中的数据访问是否需要互斥锁/锁。例如,假设我已经创建了一个简单的服务器。服务器提供了几种协议方法,可以添加到内部阵列中或从内部阵列中删除。我需要使用某种互斥量保护内部阵列吗?

我了解Javascript(因此Node.js)是单线程的。我只是不清楚事件的处理方式。事件会中断吗?如果真是这样,我的应用程序可能正在读取数组的过程中,被打断以运行事件回调以更改数组,然后继续处理该事件回调已更改的数组。


问题答案:

我想知道Node.js中的数据访问是否需要互斥锁/锁。

不!在没有其他代码可运行时立即处理事件,这意味着不会发生争用,因为只有当前正在运行的代码才能访问该内部数组。作为节点是单线程的副作用,长时间的计算将阻止所有其他事件,直到完成计算为止。

我了解Javascript(因此Node.html" target="_blank">js)是单线程的。我只是不清楚事件的处理方式。事件会中断吗?

不,事件不会中断。例如,如果将a while(true){}放入代码中,它将停止执行任何其他代码,因为总有另一个循环要运行。

如果您需要长时间运行计算,最好使用process.nextTick,因为这将允许它在没有其他任何运行的情况下运行(我对此感到困惑:下面的示例表明我可能正确运行,可能不会中断)。

如果还有其他问题,请随时进入#node.js并提出问题。另外,我请几个人看看这个,并确保我没有完全错;)

var count = 0;

var numIterations = 100;
while(numIterations--) {
  process.nextTick(function() {
    count = count + 1;
  });
}

setTimeout(function() {

  console.log(count);

}, 2);

//
//=> 100
//

感谢#node.js的AAA_awright :)



 类似资料:
  • Go语言包中的 sync 包提供了两种锁类型:sync.Mutex 和 sync.RWMutex。 Mutex 是最简单的一种锁类型,同时也比较暴力,当一个 goroutine 获得了 Mutex 后,其他 goroutine 就只能乖乖等到这个 goroutine 释放该 Mutex。 RWMutex 相对友好些,是经典的单写多读模型。在读锁占用的情况下,会阻止写,但不阻止读,也就是多个 gor

  • 问题内容: 阅读有关锁定PHP的一些文章。 它们主要都直接指向http://php.net/manual/en/function.flock.php。 本页讨论如何在硬盘上打开文件! 真的是这样吗?我的意思是,这使锁定变得非常昂贵-这意味着每次要锁定时,我都必须访问硬盘)= 能再给我一个令人愉快的消息安慰我吗? 编辑: 由于我已经收到了一些答复,我想问这个。 我的脚本只能由一个或多个线程运行?因为

  • 问题内容: 我想在我的node.js应用程序内实现互斥锁,这是Wiki http://en.wikipedia.org/wiki/Mutual_exclusion中的互斥锁。 这个主题有没有准备好的模块?如果没有,有什么想法可以帮助我实施它吗? 问题答案: 有很多方法可以完成此任务。有两种简单的方法是通过Redis或Zookeeper服务器。Node.js两者都有很好的模块。 在Redis中,您可

  • 互斥是多线程系统中用于控制访问的一个原对象(primitive object)。下面的例子给出了它最基本的用法: std::mutex m; int sh; //共享数据 // … m.lock(); // 对共享数据进行操作: sh += 1; m.unlock(); 在任何时刻,最多只能有一个线程执行到lock()和unlock()之间的区域(通常称为临界区)。当第一个线程正在临界区执行时

  • 上面的例子中,我们看过了如何在多个协程之间原子地访问计数器,对于更复杂的例子,我们可以使用Mutex来在多个协程之间安全地访问数据。 package main import ( "fmt" "math/rand" "runtime" "sync" "sync/atomic" "time" ) func main() { // 这个例子的状态就

  • 线程使用互斥量保护共享资源 线程使用互斥量保护共享资源 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-24 yangjie the first versi