前面我们了解到CPU跟带宽是具有恢复周期的,但是,多久才能恢复?为什么我等了一周都还是老样子呢? 这篇文章简单聊一下CPU和带宽恢复的问题。需要特别说明的是,因为EOS的资源模型涉及面甚广,复杂度也高,所以,我们在这系列文章之中会时不时回来更新对于资源模型的认知。在跟许多程序员朋友交流的过程中,得到了许多的启发,也会不定时更新。 我所说的可能并不正确,只是抛砖引玉,将我目前的一些认知写下来,跟对EOS研究感兴趣的朋友一起探讨。 24小时,cpu跟带宽资源即可恢复先上结论,后面我们再来结合例子解释: - 账号的CPU跟带宽资源的使用量,不会自动更新。
- 只有新发起一笔交易时,才更新使用量的数据。
- CPU跟带宽资源用掉之后,恢复周期是24小时。
- 如果原先资源已经完全耗尽,则无法发起新的交易。
- 新交易完成后,如果距离上次操作已经间隔了24个小时,则cpu跟带宽的使用量,只是本次的使用量。
数据的惰性更新拿我的一个账号来做例子: 今天早上,账号的显示状态:
可以看到,其中的cpu跟带宽资源的已经占用情况。 我接着转了一笔账, 向另外一个账号转了0.001 EOS。 转账之后,你可以注意到下图中CPU跟带宽的变化,是不是很奇怪:为什么居然变少了? 这是因为,账号使用资源的记录,不会自动更新。而是在下一笔交易的时候,才会更新数据。 我上一笔交易是两天前。所以,今天新发起了一笔交易的时候,系统进行了如下的过程: 1. 计算资源限制图一中,是我发起交易之前的资源占用状态。我们称之为:旧记录。
图三中,是我发起交易之后的资源占用状态,称之为:新记录。 在我新发起转账交易的时候,系统会先根据数据表中已有的记录(旧记录),再加上新增交易的资源占用情况,如果超过了系统分配给你的总数额(比如,cpu使用的时间,或者带宽资源的字节数),则这表交易会被拦截,系统会提示资源不足。 如果,新交易的消耗资源量 + 旧记录(即上次交易之后所记录下来的资源使用量) <= 系统分配的资源总量,那么,这笔交易就可以顺利进行。 我们继续。 2. 资源使用量的更新如果交易间隔上一次操作已经间隔了24个小时以上,那么,在发起新的这笔交易时候,cpu跟带宽的资源量更新为: 新记录 = 0 + 本次资源的消耗量 比如说,本次操作距离之前的记录已经过了24小时,本笔交易占用了1kb的带宽,和0.05ms的cpu资源,那么,转账成功后,资源使用记录会变更为: cpu用量 = 0.05 ms,即本次资源的消耗量
带宽用量 = 1kb,即本次操作的带宽耗用量 虽然cpu跟带宽资源,在操作完成之后,节点就不需要再继续占用该部分资源了,但是仍然会记录下来,这是为了限制每个账号的可用资源量,保证系统的稳定。 3. 24小时内的操作上面说到的是24小时之后的操作,那么,如果本次操作距离上次操作不足24小时呢? 假设,在23个小时前,带宽的使用量为240Kb,那么,在第23个小时的时候,我更新了一笔操作,占用了1kb的带宽资源,那么,新交易执行完毕之后,带宽资源的使用量会更新为: (1-23/24)* 240kb + 1kb 前面部分为原先资源的使用量在更新之后的记录,后面的1kb,是本次操作所占用的资源量。 那么,在我新发起了这笔操作之后,就显示为: 11kb了。 4. 总结如果只需要记住一点,就请记住: cpu跟带宽的占用数据,只有在新发起一笔交易之后才会更新。时间窗口是24小时,即,相隔24小时之后,cpu跟带宽就会完全恢复了。但是,只有你新发起一笔操作, 才会恢复。
|