问题标签 [fail-fast]

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 回答
177 浏览

python - 进程关闭时禁用“加入”

有没有办法阻止multiprocessingPython 模块尝试调用并等待join()父进程的子进程关闭?

2010-02-18 10:58:34,750 INFO calling join() for process procRx1

我希望我向其发送 a 的进程尽快SIGTERM退出(即“快速失败”),而不是在最终放弃join尝试之前等待几秒钟。

澄清:我有一个“中央进程”,它创建了一堆“子进程”。我正在寻找一种方法来干净地处理来自任何进程的“SIGTERM”信号,以降低整个进程树。

0 投票
4 回答
2818 浏览

java - Java 容器是否提供故障安全迭代器

这是我的问题:

这段代码抛出一个java.util.ConcurrentModificationException,因为这个数据结构Vector listeners存在一个 被修改。Iteratorjava-doc 说这个容器只提供了一个快速失败的迭代器。

如果在“生命”期间删除了一个元素,是否有可能Iterator通过标准容器(如JavaVectorListJava)为我提供一个Iterator不会变得无效(不是快速失败)的容器Iterator

我应该具有与std::listC++ 中相同的行为。即使当前迭代器被删除,迭代器也始终有效。比迭代器设置为列表中的下一个元素。

0 投票
3 回答
1473 浏览

erlang - 为什么快速失败式程序比防御式程序短?

我已经读过关于像 Erlang 这样的语言中快速失败的编程风格如何最终得到比大多数其他语言中的防御风格更短的程序。这对所有类型的程序都正确吗?原因是什么?

0 投票
2 回答
1208 浏览

c# - 如何将防御性编程技术结合在一起?

我想问你的问题很广泛,但同时也很具体。首先,我不得不说,我最感兴趣的是适用于 .net 环境的答案。

好吧,我想提高我生成的代码的级别。现在我主要使用 TDD 和静态代码分析来确保我的代码是正确的。最近我听了 Dino Esposito 关于代码合约的演讲,现在我想将它与其他技术结合使用。在听 Dino 的时候,我还记得Debug.Assert()and Trace.Assert()

具体来说,我会问几个问题:

  • 我应该如何编写合同和单元测试以相互补充?
  • 我应该在每种方法中使用代码契约还是只在公共方法中使用代码契约?
  • 我应该阻止使用Debug.Assert()吗?什么时候可以使用它们?(例如,请注意 .net 中的不变量仅在公共方法/属性退出时检查。那么,是否可以通过简单的方法在方法中间进行一些检查Assert()?)
  • 您能否向我推荐一个开源项目,其中所有这些技术都被正确使用,因为一张图片描绘了一千个单词?
0 投票
0 回答
219 浏览

java - 检测 Serializable 对象是否真的可序列化?

是否有内置方法 - 或者有人可以指出一个好的模式 - 来确定实现的对象Serializable在构造时是否实际上是可序列化的?我需要没有副作用的东西,所以我不能只调用我的应用程序服务器中实际序列化对象的方法。

我更喜欢可以在构造函数中利用而不更改构造函数签名的东西。但是,我不介意为这些对象建立一个工厂,如果这样会更容易的话。

编辑

根据这个问题 接受的答案,看起来我可以创建自己的ObjectOutputStream->ObjectInputStream管道来在创建时测试对象的可序列化性。

0 投票
4 回答
916 浏览

java - 为什么使用iterator.remove时没有错误?

如果我使用Iterator.remove(),一切都很好。如果我使用ArryaList.remove(),我总是收到错误java.util.ConcurrentModificationException

谁能指出原因?

0 投票
2 回答
644 浏览

java - 无法理解有关快速失败的评论

在 JDK 1.6 的 HashSet.java 中,有一些关于 HashSet 迭代器的 fail-fast 属性的注释。

此类的迭代器方法返回的迭代器是快速失败的:如果在创建迭代器后的任何时间修改集合,除了通过迭代器自己的 remove 方法之外,迭代器会抛出 ConcurrentModificationException。因此,面对并发修改,迭代器快速而干净地失败,而不是在未来不确定的时间冒任意的、非确定性的行为。

我可以理解上面的段落,因为它非常简单明了,但我无法理解下面的段落。如果我有一些简单的例子表明快速失败的迭代器甚至会失败,我可能会理解它。

请注意,不能保证迭代器的快速失败行为,因为一般来说,在存在不同步的并发修改的情况下,不可能做出任何硬保证。快速失败的迭代器会尽最大努力抛出 ConcurrentModificationException。因此,编写一个依赖于这个异常的正确性的程序是错误的:迭代器的快速失败行为应该只用于检测错误。

0 投票
5 回答
4132 浏览

java - 快速失败迭代器

我得到了这个定义:顾名思义,快速失败的迭代器一旦意识到自迭代开始以来集合的结构已经改变,就会失败。

自迭代开始以来是什么意思?是不是意味着Iterator it=set.iterator()这行代码之后?

0 投票
2 回答
549 浏览

design-by-contract - 按合同设计并快速失败

快速失败 -

Fail-fast 是系统或模块在对故障的响应方面的属性。快速故障系统旨在立即在其接口上报告任何可能导致故障的故障或情况。快速故障系统通常旨在停止正常操作,而不是尝试继续可能有缺陷的过程。此类设计通常在操作中的多个点检查系统状态,因此可以及早发现任何故障。故障快速模块将处理错误但不检测错误的责任传递给下一个更高的系统设计级别。

合同设计 -

契约式设计(DbC),也称为契约式编程、契约式编程和按契约式编程,是一种设计软件的方法。它规定软件设计者应该为软件组件定义正式的、精确的和可验证的接口规范,用前置条件、后置条件和不变量扩展抽象数据类型的普通定义。根据商业合同的条件和义务的概念隐喻,这些规范被称为“合同”。

我的问题是这两个术语的相似之处和不同之处。我认为两者都是用于软件设计的。

快速失败更多的是对系统故障的响应,而契约式设计更多的是对系统的保证、最低限度和期望。

但是我如何真正定义它们之间的差异和相似性。

感谢您的帮助。!

0 投票
2 回答
1626 浏览

exception - 如何让 Storm 在异常时停止?

默认情况下,当Storm spout 或 bolt 遇到异常时,它会重新启动 spout 或 bolt 并再次尝试。是否有任何配置选项可以使其停止拓扑,也许在 N 次重复尝试之后?(例如,Hadoop 在放弃之前尝试了 4 次。)

我有一个 Storm 拓扑运行了 77 天,其中一个螺栓在每个元组上引发了一个异常。在这种情况下,我宁愿它失败,以便我注意到有问题。