Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nodejs内存缓存线程安全

Nodejs内存缓存线程安全
EN

Stack Overflow用户
提问于 2019-12-27 01:10:53
回答 1查看 655关注 0票数 0

我有节点服务。节点服务有一个内存缓存,它是内存中的键值存储。节点服务还每天运行周期性任务,这是重建缓存(CPU密集型和花费大量时间)。当重建缓存任务正在运行时,它会阻止其他/get请求吗?这里有比赛条件吗?

代码语言:javascript
运行
AI代码解释
复制
/get: get the cache data by key

setInterval(()=>{ rebuildCache() ; }, 3600)

async rebuildCache(filepath: string, key: string): Promise<void> {
  const obj = constructFromFile(filepath) 
  //load json from filepath. do some cpu intensitive work. (build schema, reference, etc)

  cache[key] = obj
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-27 02:15:18

会阻止其他/get请求吗?

这取决于rebuildCache()做什么以及它是如何工作的。如果它是一个同步操作(完全是CPU),那么这将阻止事件循环并阻止所有请求处理。

这里有比赛条件吗?

这取决于使用缓存的代码是如何编写的,以及rebuildCache()做了什么。如果使用缓存的任何操作都是异步的,并且它们依赖于缓存的一致性,从它运行异步操作之前到完成异步操作之后,那么rebuildCache()可以在该时间窗口中发生,并且您确实有一个争用条件。

问题在于使用缓存和重新构建缓存的函数来实现代码的实际实现,因此我们只能提供假设的答案,而不能看到实际的代码。

FYI,你问题中的这个代码:

代码语言:javascript
运行
AI代码解释
复制
setInterval(rebuildCache())

只给rebuildCache()打过一次电话。要在任何时间间隔内调用它,您需要如下所示:

代码语言:javascript
运行
AI代码解释
复制
setInterval(rebuildCache, t);

注意,您传递一个函数引用(没有父函数),并为计时器间隔传递一个时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59498417

复制
相关文章
线程安全&Java内存模型
JMM规定线程之间的共享变量存储在主内存中,每个线程都有一个本地内存(工作内存),本地内存存储了共享变量的副本。
Noneplus
2020/08/11
5090
线程安全&Java内存模型
Java内存模型和线程安全
对于多核处理器而言,每个核都会有自己单独的高速缓存,又因为这多个处理器共享同一块主内存,为了在并行运行的情况下,包装各个缓存中缓存的结果的一致性,需要引用缓存一致性协议。
大忽悠爱学习
2023/02/10
5070
Java内存模型和线程安全
c++ 日志类 线程安全+缓存
根据上一次的测试,有缓存的日志类性能会更好。用到了time.h类函数,所以在linux下就要改动一下了,windows环境下写的。
forxtz
2020/10/10
1.3K0
JAVA线程-CPU缓存和内存屏障(四)
1.修改态(Modified),此cache行已被修改过(脏行),内容已不同于主存,为此cache专有。 2.专有态(Exclusive),此cache行内容同于主存,但不出现于其他cache中。 3.共享态(Shared),此cache行内容同于主存,但也出现于其他cache中。 4.无效态(Invalid),此cache行内容无效,需要从主内存重新加载。
IT架构圈
2020/03/28
1.9K0
Go 使用互斥锁(sync.Mutex)实现线程安全的内存本地缓存(LocalCache)
如果嵌入结构的字段和外部结构的字段相同,那么, 为了避免命名冲突, 想要修改嵌入结构的字段值需要加上外部结构中声明的嵌入结构名称.
一个会写诗的程序员
2022/05/13
9710
Nodejs·内存控制
之前有考虑过Node中的内存管理,但是没想到Node的内存机制与JVM如此相像。 看完这部分的内容,基本可以了解Node中的内存使用技巧: 1 尽量不要做过多的缓存 2 使用队列应该有限制 3
用户1154259
2018/01/17
1.2K0
Nodejs·内存控制
NodeJs内存管理
本文作者:ivweb 王少飞 原文出处:IVWEB社区 nodejs进程内存的使用和原理 V8简介 nodejs代码的运行基于V8,就像java运行需要hotspot,php运行需要zend。V8的由
serena
2017/11/30
3.1K0
Netty14# 池化内存之线程缓存
在前面文章『Netty12# 池化内存框架流程』Netty会将不同的内存尺寸缓存起来,每个线程绑定了专属逻辑内存区域(PoolArena),减少资源竞争。每个线程绑定了缓存PoolThreadCache,内存分配时,先从当前线程绑定的PoolThreadCache缓存分配。
瓜农老梁
2021/03/16
6570
基于线程安全的缓存工具类 CacheUtil
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.*; /** * @author * @date 2019/12/13 * @desc 基于线程安全的缓存工具类 */ public class CacheUtil { private static Logger LOGGER = LoggerFactory.getLogger(CacheUtil.class);
Dream城堡
2022/01/07
7550
Tomcat优化(内存,并发,缓存,安全,网络,系统等)
3.配置示例: JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’ 说明:其内存的配置需要根据服务器(或虚拟机)的实际内存来配置
菲宇
2019/06/12
8.8K0
Tomcat优化(内存,并发,缓存,安全,网络,系统等)
Caffeine缓存 最快缓存 内存缓存
Caffeine是在Guava Cache的基础上做一层封装,性能有明显提高,二者同属于内存级本地缓存。使用Caffeine后无需使用Guava Cache,从并发的角度来讲,Caffeine明显优于Guava,原因是使用了Java 8最新的StampedLock锁技术。
赛先生和泰先生
2022/01/21
3.1K0
Caffeine缓存 最快缓存 内存缓存
线程安全的iOS通用缓存库-SwiftlyCache(推广)
iOS开发中或多或少都会使用到Cache来减少网络请求,在网络上也有很多使用Objective-c开发的Cache框架,而Swift开发的Cache框架相对来说就要少一些,所以我就用Swift 5开发了一款Cache库-SwiftlyCache(https://github.com/hlc0000/SwiftlyCache)
大话swift
2020/03/31
1.5K0
线程安全的iOS通用缓存库-SwiftlyCache(推广)
nodejs创建线程问题
我们知道在nodejs中可以使用new Worker创建线程。今天有个同学恰好问到,怎么判断创建线程成功,这也是最近开发线程池的时候遇到的问题。nodejs文档里也没有提到如何捕获创建失败这种情况。所以只能通过源码去找答案。不过坏消息是,我们无法捕获这个这个错误。下面看一下源码。我们直接从c++层开始分析。 当我们调用new Worker的时候,最后会调用c++的StartThread函数(node_worker.cc)创建一个线程。
theanarkh
2020/08/14
1K0
nodejs 多线程支持
1、类似于cluster的多进程模式需要判断当前是否主进程,这边也提供了类似的api。通过isMainThread即可。
ACK
2020/01/14
1.1K0
nodejs 多线程支持
学习Rust,了解内存和线程安全问题
Rust编程语言旨在确保内存安全,它混合使用编译时静态检查和运行时锁来阻止程序访问无效指针或在没有适当同步的情况下跨线程共享内存。Rust的实现方式通常理解是引入了可变的借用和不可变的引用、生命周期等。
非凸科技ft.tech
2022/04/06
4380
c 线程安全的单例模式-C++单例模式(线程安全、内存释放)
  一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。
宜轩
2022/12/29
1.9K0
内存缓存详解
很多时候我们为了缩短单次请求的时间,就需要去分析请求在哪一步耗时比较大,一般越靠近应用层优化效果越大,后端程序就是请求到达路由解析到返回结果这一步骤了。
花落花相惜
2021/12/16
7070
go 内存缓存
很多时候我们为了缩短单次请求的时间,就需要去分析请求在哪一步耗时比较大,一般越靠近应用层优化效果越大,后端程序就是请求到达路由解析到返回结果这一步骤了。
花落花相惜
2021/11/25
8780
[BlogCore操作文档4] MemoryCache:内存缓存
采用最新的前后端完全分离技术【 ASP.NET Core Api 6.0 + Vue 2.x 】,并结合 IdentityServer4 ,可快速解决多客户端和多资源服务的统一认证与鉴权的问题,以及整合较为完善的数据权限控制。
老张的哲学
2023/08/23
3230
[BlogCore操作文档4] MemoryCache:内存缓存
内存缓存MemoryCache
内存缓存MemoryCache实现了ICache接口,Redis同样实现了ICache接口,两者在缓存操作上达到了高度抽象统一。应用设计时一律使用ICache接口,开发环境装配为MemoryCache,生产环境根据分布式需要可以装配为Redis。如果应用系统没有分布式需求,继续使用MemoryCache更好。
JusterZhu
2022/12/07
8330
内存缓存MemoryCache

相似问题

线程安全内存缓存

26

内存缓存的线程安全实现

12

高性能内存缓存的线程安全

57

使用内存缓存的异步/等待线程安全

25

线程安全缓存

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档