什么是幂等运算?
当前回答
my 5c: In integration and networking the idempotency is very important. Several examples from real-life: Imagine, we deliver data to the target system. Data delivered by a sequence of messages. 1. What would happen if the sequence is mixed in channel? (As network packages always do :) ). If the target system is idempotent, the result will not be different. If the target system depends of the right order in the sequence, we have to implement resequencer on the target site, which would restore the right order. 2. What would happen if there are the message duplicates? If the channel of target system does not acknowledge timely, the source system (or channel itself) usually sends another copy of the message. As a result we can have duplicate message on the target system side. If the target system is idempotent, it takes care of it and result will not be different. If the target system is not idempotent, we have to implement deduplicator on the target system side of the channel.
其他回答
无论调用该操作多少次,结果都是相同的。
在计算中,幂等运算是指如果使用相同的输入参数多次调用它,则不会产生额外影响的运算。例如,从集合中移除一项可以被认为是集合上的幂等操作。
在数学中,幂等运算是指f(f(x)) = f(x)。例如,abs()函数是幂等的,因为对于所有x, abs(abs(x)) = abs(x)。
考虑到数学定义中的x代表一个对象的状态,而f是一个可能改变该对象的操作,可以调和这些略有不同的定义。例如,考虑Python集合及其discard方法。discard方法从集合中删除一个元素,如果该元素不存在,则不执行任何操作。所以:
my_set.discard(x)
与执行两次相同的操作具有完全相同的效果:
my_set.discard(x)
my_set.discard(x)
幂等操作经常用于网络协议的设计中,其中执行操作的请求保证至少发生一次,但也可能发生多次。如果操作是幂等的,那么执行两次或两次以上的操作是没有伤害的。
更多信息请参见维基百科关于幂等性的文章。
上面的答案之前有一些不正确和误导性的例子。下面的评论写在2014年4月之前,是指一个较旧的修订。
my 5c: In integration and networking the idempotency is very important. Several examples from real-life: Imagine, we deliver data to the target system. Data delivered by a sequence of messages. 1. What would happen if the sequence is mixed in channel? (As network packages always do :) ). If the target system is idempotent, the result will not be different. If the target system depends of the right order in the sequence, we have to implement resequencer on the target site, which would restore the right order. 2. What would happen if there are the message duplicates? If the channel of target system does not acknowledge timely, the source system (or channel itself) usually sends another copy of the message. As a result we can have duplicate message on the target system side. If the target system is idempotent, it takes care of it and result will not be different. If the target system is not idempotent, we have to implement deduplicator on the target system side of the channel.
任何操作,每n个结果都会产生与第1个结果值匹配的输出。例如,-1的绝对值是1。-1的绝对值的绝对值是1。-1绝对值的绝对值的绝对值等于1。等等。请参见:什么时候使用递归是非常愚蠢的?
幂等运算即使调用多次也会产生相同状态的结果,前提是传入相同的参数。