问题标签 [non-volatile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
102 浏览

php - Linux 高速(/无影响)存储(用于设置)和 PHP

如果标题听起来令人困惑,我很抱歉,如果您在此描述后有任何更好的想法,请随时提出建议。

简而言之,我在 Linux 上使用带有以下假设文件/代码的 PHP:

工作.php:

接口.php:

代码应该是不言自明的。基本上,job.php应该只能无限期地运行一个实例,直到用户明确停止它interface.php,它可以在用户和作业之间进行调解。

我的问题是setting_get-setting_set它们只是假设的函数,可以很容易地用平面文件或数据库替换。问题是它们被调用了很多,这就是为什么它们应该运行得快并且消耗很少的内存(如果可能的话,甚至根本没有)。

想法?

编辑: 应该注意的是,到目前为止我保存的设置也可以是一个简单的布尔标志。

Edit2 关于 Memcached / APC / Redis。我想知道,我不能在 MEMORY 类型的数据库上使用普通的 mysql 函数吗?我想知道有多少开销?问题是,我宁愿使用我已经拥有的东西,也不愿安装新东西,但话又说回来,这取决于实施。

0 投票
2 回答
1126 浏览

android - 如何在框架级别创建/使用非易失性变量

我无法在 android 框架级别或应用程序级别创建变量,即使在出厂重置或软件更改后仍将保留其值。我可以在基于高通的调制解调器代码上实现同样的事情。在高通我们可以添加 NV 项目。

但我希望在 android 框架层或应用程序层中使用它。

我正在开发 froyo 2.2 版。

0 投票
5 回答
4630 浏览

python - 将python队列保存到文件

我正在使用 Python Queue cclass 来管理在多个工作线程之间共享的任务列表。实际代码非常庞大,我仍在努力使其完全没有错误。有时,工作线程会崩溃,我必须重新启动整个例程。在此过程中,我丢失了所有已排队的任务。有没有办法将队列保存到文件中,以便每当我重新启动进程时,任务列表都会从该文件中预加载?

乍一看,似乎当我将任务放入队列或将任务放入队列时,我应该同时读取和写入文件。但是,这并没有给我 queue.task_done() 的功能,并且可能不是最优化的解决方案。任何想法将不胜感激。

0 投票
1 回答
493 浏览

java - Java:可变变量访问

我对 volatile 变量如何有效地从“主”内存访问有点困惑。它与具有本地副本的变量(非易失性)有何不同?每当多个线程访问非易失变量和易失变量时,典型的工作流程是什么?我的意思是他们如何在幕后工作?

0 投票
1 回答
405 浏览

static - struct Non_const、non_volatile 静态或外部变量

我的代码编译并运行,但我仍然收到一条 lint 错误消息:

--- 模块:LunchMenu_main.c (C)
} lunch[LUNCHES] =
LunchMenu_main.c: 警告 956:(注意 -- 非 const、非易失性静态或外部变量“午餐”)

虽然演示了非常量静态和外部变量的使用,但使用它们有很多陷阱,除非没有其他合理的解决方案,否则应避免使用它们。有什么办法可以避免这些类型的变量,或者我需要这些变量来修复这个错误吗?这是我的代码:

0 投票
2 回答
2145 浏览

static - c# .net 内存中持久性

我想为服务器发回的每个请求提供一个“用户消息”。如果没有用户消息,则消息返回空白。如果有,则在他们的请求完成后,每个用户屏幕上都会激活一个图标。

[编辑] “用户消息”是管理员为我正在部署的应用程序设置的内容。管理员可以在字段中输入文本并单击按钮以将此消息发送给系统的所有其他用户。每当其他用户执行任何类型的操作时,当前用户消息都会附加到 JSON 响应并由前端处理。

为了优化这一点,我希望将消息存储在内存中(而不是数据库中)。

我曾尝试使用静态。我曾尝试使用 HttpApplicationState。在这两种情况下,用户消息的值都会在一段时间后“消失”。经过一番研究,似乎静态和 HttpApplicationState 都受到IIS的影响,并且它决定回收应用程序池。(或一些这样的)

静态变量的这种波动是神秘的:它应该是静态的——只要IIS本身存在,这个变量就应该存在。它不应该依赖于某种“重置”或其他什么。HttpApplicationState 是我不完全理解的其他一些情况。

我想要一种将值存储在我可以依赖的非易失性变量中的方法。如果我今天设置此值,它应该在明天或下周出现,只要IIS没有停止并重新启动。

有什么帮助吗?


这是我根据以下接受的答案为解决问题所做的工作:

  1. 用户消息是有时事。因此,当某个管理员设置消息时,将响应存储在该时间点的数据库中并将其存储在 Application["UserMessage"] 对象中。
  2. 当用户往返时,用户消息的内存文本被添加到 json 返回值中。
  3. 管理员可以随时清除该消息,这将清除内存中的消息和数据库字段。
  4. 当 IIS 认为足够了并回收应用程序时,Application_Start() 方法(以及其他任务)还将从设置用户消息时存储的数据库值中重新播种用户消息(按照步骤 1)。

现在应用程序按预期工作。对于进入系统的每个用户请求,无需支付额外的费用进入数据库 - 用户消息始终来自内存。除此之外,很少为用户消息更新或加载数据库。

0 投票
1 回答
1078 浏览

c++ - 非易失性变量

如果我将变量标记为易失性,我会在代码中的每次访问中获得保证读取。

但是非易失变量呢?

是否保证每个函数/块至少读取一次,或者是否可以跨函数边界优化值?

0 投票
3 回答
1066 浏览

scala - 无法覆盖具有非易失性上限的类型


我在 scala 中有一个编译器错误,我不知道它指的是什么:
假设这些声明:

我在这里(在 trait 中B)想要实现的是进一步限制在 中MyType声明的类型Abstract,因此任何类型的值都MyType必须扩展MyTypemixin 树中的所有 s。

编译器给了我这个消息(如标题): 类型 MyType 是易失类型;不能覆盖具有非易失性上限的类型。我知道,由于类型结合,这里发生了类型波动with A#MyType,错误的一部分:具有非易失性上限的类型可能是指类型声明type MyType <: AInner,其中AInner不是抽象类型,因此是非易失性的。

为什么我做不到?有没有办法,如何实现我的目标?

0 投票
1 回答
969 浏览

models - 在 SIMULINK 模型中对闪存或非易失性内存活动进行建模

我试图在系统启动后检索两个 1 位值(即它们以前的值),或者如果情况发生变化,则在正常操作期间写入它。当我说“系统启动”时,我想明确表示这是一个位于非常大系统内的子系统。

这个想法是,如果我断开这个子系统,系统的其余部分不受影响。我将根据它们最后的已知状态保留两个 1 位值。在子系统再次启动时,根据我的处理,这些 1 位值将被保留或被新值覆盖。出于保密原因,我不能比我已经拥有的更深入。

到目前为止我的方法

附件是执行此内存读/写的子系统部分的 SIMULINK 图。我相信这会奏效。但是,我并不完全确定。有人能想到更好的方法吗?我知道一个明显的答案是说“尝试从工作区保存和加载”,但我有一个只允许从 Flash/E2PROM 加载的规范。不幸的是,我不知道 SIMULINK 中有什么可以做到这一点。如果有人知道不同的东西,我很高兴能接受充分的教育:)

在此处输入图像描述

谢谢。

0 投票
1 回答
394 浏览

java - 在什么情况下,其他线程看不到对非易失性变量的写入?我可以出于实验目的强制使用这些条件吗?

我最近在 SO 和其他地方阅读了很多关于线程内存管理的内容,特别是volatile关键字的使用。我开始对这个概念有相当的信心,但是,为了充分了解它的效果,我想尝试运行一些实验来说明它。

这是我的设置:我有一个生产者线程(它从麦克风读取音频数据,与我之前的问题相关,但实际数据无关紧要)将数据传递byte[]给单独的消费者线程。线程之间共享数据的方式是我实验中的主要变量:我尝试过ArrayBlockingQueue; 我尝试了共享volatile byte[]参考(使用此博客文章array = array中推荐的自我参考);而且我还尝试了没有自引用的普通非易失性。两个线程同时也将数据写入磁盘。byte[]

我的希望是发现,非易失byte[]版本在运行一段时间后,由于一些内存写入不及时可见,生产者尝试共享的数据与消费者读取数据的数据之间存在差异,而其他两个版本的每个线程记录的数据完全相同,因为采取了确保发布内存写入的预防措施。然而,碰巧的是,无论我使用什么方法,我都发现 100% 准确。

关于为什么会发生这种情况,我已经想到了一些可能性,但我的主要问题是: 在什么条件下写入另一个线程看不到的非易失性变量,据我所知,这就是重点volatile?我可以强制这些条件用于实验目的吗?

到目前为止,我的想法是:

  • 也许这两个线程在同一个核心上运行并共享同一个缓存,所以内存写入是立即可见的?
  • 也许CPU负载是一个因素?在我看到任何问题之前,也许我需要很多线程都在做不同的事情?
  • 也许我需要等待更长的时间:也许这样的问题非常罕见?

谁能建议我如何设计这样的实验或解释我的想法有缺陷的原因?

非常感谢。