问题标签 [non-deterministic]

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 投票
3 回答
8008 浏览

sql - Creating Nondeterministic functions in SQL Server using RAND()

After a bit of searching and reading the documentation, it's clear that you can write user defined functions in SQL Server that are marked as either deterministic or nondeterministic depending on which built-infunctions are used within the body.

RAND() is listed under the nondeterministic functions (see msdn article). So why can't I use it in a function?

0 投票
12 回答
3452 浏览

c++ - 非确定性的来源

我所谓的确定性程序在不同的运行中产生了几个略有不同的输出之一。输入、编译器和计算机是不变的。我不确定哪个输出是正确的,因为它看起来总是合理的。

除了对 rand() 的杂散调用之外,这怎么可能呢?

0 投票
2 回答
19179 浏览

sql - Sql Server 确定性用户定义函数

我有以下用户定义的函数:

我无法使用此函数在计算列上创建索引,因为它不是确定性的。有人可以解释为什么它不是确定性的,以及最终如何修改以使其具有确定性?谢谢

0 投票
0 回答
476 浏览

c++ - DIR* 如何获得 EBADF 错误?

我有一些我继承的代码,它是用于迭代、访问目录内容并使用 boost::filesystem::path 的类的一部分。代码部分内容如下:

我遇到的问题是不可重现的 ASSERT,其中 errno == EBADF in handle_read_error()。现在检查代码,在我看来,在构造函数中,m_directory_stream 已设置,没有其他任何东西触及它。它不是 NULL 或者构造函数会调用 handle_open_error() 并且不会出现这种情况。因此,在构建时,m_directory_stream 是有效的,并且在打开时没有发生错误。然而,一段时间后,unsafe_increment() 被调用,也许是在构造函数的后面调用,此时 DIR 对象现在是 EBADF,我们在堆栈中得到断言失败。

以下是检测到故障的机器的信息(注意应用程序是单线程的):

当我们持有它时,文件描述符怎么会变坏?这是 dirent.h 接口的已知问题吗?

请建议如何使此代码更好并避免此不可重现的问题。

0 投票
2 回答
214 浏览

c++ - 浮点比较 - 不同运行之间的结果

我知道我无法在 C++/C 上比较两个浮点数或双精度数的绝对相等性。如果出于某种原因,我编写了一个使用绝对相等的 if 条件,是否可以保证 if 条件在程序的不同运行中为相同的数据返回相同的结果?或者它纯粹是不确定的,结果可能会有所不同?

0 投票
8 回答
6140 浏览

multithreading - 多线程程序可以是确定性的吗?

通常说多线程程序是不确定的,这意味着如果它崩溃,几乎不可能重新创建导致该条件的错误。人们永远不知道接下来会运行什么线程,以及何时会再次被抢占。

当然,这与操作系统线程调度算法有关,而且人们不知道接下来要运行哪个线程,以及它会有效运行多长时间。程序执行顺序也起作用,等等......

但是,如果您有用于线程调度的算法,并且如果您知道什么线程正在运行,那么多线程程序是否会变得“确定性”,例如,您将能够重现崩溃?

0 投票
2 回答
1712 浏览

linux-kernel - 在没有写屏障的情况下,磁盘控制器如何处理对同一扇区的并发写入?

当我使用 O_DIRECT|O_ASYNC 打开一个文件并对同一个磁盘扇区进行两次并发写入,中间没有 fsync 或 fdatasync 时,linux 磁盘子系统或硬件磁盘控制器是否提供任何保证,即该磁盘扇区上的最终数据将是第二个写?

虽然 O_DIRECT 确实绕过了 OS 缓冲区缓存,但数据最终会出现在低级 IO 队列中(磁盘调度程序队列、磁盘驱动程序队列、硬件控制器的缓存/队列等)。我一直跟踪 IO 堆栈到电梯算法。
例如,如果以下请求序列最终出现在磁盘调度程序队列中

电梯代码将执行“反向合并”以分别从缓冲区 1,2 合并扇区 1,2。然后发出磁盘两个磁盘 IO。但我不确定磁盘扇区 1 上的最终数据是来自缓冲区 1 还是缓冲区 3(因为我不知道驱动程序/控制器的写入重新排序语义)。

场景二:

这种情况将如何处理?一个更基本的问题是,在使用 AIO 以 O_DIRECT 模式进行写入时,在没有显式写入屏障的情况下,这个请求序列能否最终进入磁盘调度程序的队列?
如果是,是否有任何排序保证,例如“多次写入同一扇区将导致最后一次写入成为最终写入”?
或者是非确定性的排序[任由磁盘控制器/其缓存重新排序障碍内的写入以优化寻道时间]

0 投票
2 回答
839 浏览

deterministic - 确定性错误示例

有人可以给我一个程序中确定性错误的例子吗?

谢谢。

0 投票
1 回答
637 浏览

list - 为什么 Curry 的标准库中的非确定性选择函数没有直接定义,而是使用辅助 2 参数函数定义?

考虑Curry 编程语言choose中的一个函数,其规范是“非确定性地从列表中选择一个元素”。(choose xs)xs

我将通过两个替代的非确定性规则直接实现它:

但是在Muenster Curry Compiler的 /usr/lib/curry-0.9.11/Success.curry 中,它是使用辅助函数定义的:

编译器提供的模块的定义有什么优点(如果有的话)?这两个定义是否完全等效(即使在一些具有不确定性和未定义值的棘手情况下)?..在某些情况下其中一个更有效吗?

补充:更深层次的考虑

cthom06(谢谢!)已正确指出我的定义会导致在更多情况下达到未定义的值(因为我们会尝试在每次“顶级”调用时使用空列表参数调用此函数一次非空列表参数)。(嗯,为什么我没有马上注意到这个考虑?..)那效率较低。

但我想知道:有任何语义差异吗?在某些棘手的情况下,差异可能很重要吗?

我们看到两个定义之间的差异——在非空列表的情况下——基本上归结为两个潜在定义之间的差异id

我的定义就像定义id为:

他们的定义就像定义id正常的方式:

(因此,这里的直截了当。)

在哪些情况下它可能很重要?

0 投票
1 回答
133 浏览

sql - SQL:在一段时间内显示(接近)实时站点活动的最佳方式是什么?即“过去一小时内发送的消息”

目标是尽可能频繁地更新 UI,但性能是一个问题,应尽量减少对数据库的访问。

我使用索引视图来保持不是特定时间间隔的项目的最新统计信息,但这不适用,因为日期是不确定的。

其他选择是:

  • 每 X 分钟运行一次作业以收集统计信息。

  • 添加触发器以响应插入。

  • 每次/以定义的频率运行存储过程。(大部分有关表格已于有关日期编入索引)

是否还有其他我尚未确定的选项,并且是否有针对此类问题的“首选”解决方案?Job/Trigger/SP 选项如何比较?