Excel表格网

fpga实现延时如何实现?

190 2024-02-29 01:49 admin   手机版

一、fpga实现延时如何实现?

取决于你需要的延时长短,基本上有两张方法。

1)利用走线的延时。可以用约束的方法,让这个信号的走线人为绕远。这种方式可以延时几到几十纳秒,但是随着芯片的批次不同以及芯片工作温度的变化,这个延时是不精确的;

2)利用时钟往后推。就是用一个时钟对这个信号采样,可以获得时钟周期的整数倍延时。

二、rocketmq延时队列实现原理?

RocketMQ是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠、万亿级容量、灵活可伸缩的消息发布与订阅服务。

它前身是MetaQ,是阿里基于Kafka的设计使用Java进行自主研发的。在2012年,阿里将其开源, 在2016年,阿里将其捐献给Apache软件基金会(Apache Software Foundation,简称为ASF),正式成为孵化项目。2017 年,Apache软件基金会宣布RocketMQ已孵化成为 Apache顶级项目(Top Level Project,简称为TLP ),是国内首个互联网中间件在 Apache上的顶级项目。

延迟消息

生产者把消息发送到消息队列中以后,并不期望被立即消费,而是等待指定时间后才可以被消费者消费,这类消息通常被称为延迟消息。

在RocketMQ中,支持延迟消息,但是不支持任意时间精度的延迟消息,只支持特定级别的延迟消息。如果要支持任意时间精度,不能避免在Broker层面做消息排序,再涉及到持久化的考量,那么消息排序就不可避免产生巨大的性能开销。

消息延迟级别分别为1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h,共18个级别。在发送消息时,设置消息延迟级别即可,设置消息延迟级别时有以下3种情况:

设置消息延迟级别等于0时,则该消息为非延迟消息。

设置消息延迟级别大于等于1并且小于等于18时,消息延迟特定时间,如:设置消息延迟级别等于1,则延迟1s;设置消息延迟级别等于2,则延迟5s,以此类推。

设置消息延迟级别大于18时,则该消息延迟级别为18,如:设置消息延迟级别等于20,则延迟2h。

延迟消息示例

首先,写一个消费者,用于消费延迟消息:

再写一个延迟消息的生产者,用于发送延迟消息:

运行生产者以后,就会发送一条延迟消息:

10秒钟后,消费者收到的这条延迟消息:

延迟消息的原理分析

以下分析的RocketMQ源码的版本号是4.7.1,版本不同源码略有差别。

CommitLog

在org.apache.rocketmq.store.CommitLog中,针对延迟消息做了一些处理:

可以看到,每一个延迟消息的主题都被暂时更改为SCHEDULE_TOPIC_XXXX,并且根据延迟级别延迟消息变更了新的队列Id。接下来,处理延迟消息的就是org.apache.rocketmq.store.schedule.ScheduleMessageService。

ScheduleMessageService

ScheduleMessageService是由org.apache.rocketmq.store.DefaultMessageStore进行初始化的,初始化包括构造对象和调用load方法。最后,再执行ScheduleMessageService的start方法:

遍历所有延迟级别,根据延迟级别获得对应队列的偏移量,如果偏移量不存在,则设置为0。然后为每个延迟级别创建定时任务,第一次启动任务延迟为1秒,第二次及以后的启动任务延迟才是延迟级别相应的延迟时间。

然后,又创建了一个定时任务,用于持久化每个队列消费的偏移量。持久化的频率由flushDelayOffsetInterval属性进行配置,默认为10秒。

定时任务

ScheduleMessageService的start方法执行之后,每个延迟级别都创建自己的定时任务,这里的定时任务的具体实现就在DeliverDelayedMessageTimerTask类之中,它核心代码是executeOnTimeup方法之中,我们来看一下主要部分:

如果没有获取到对应的消息队列,则在DELAY_FOR_A_WHILE(默认为100)毫秒后再执行任务。如果获取到了,就继续执行下面操作:

如果没有获取到有效消息,则在DELAY_FOR_A_WHILE(默认为100)毫秒后再执行任务。如果获取到了,就继续执行下面操作:

如果当前消息不到消费的时间,则在countdown毫秒后再执行任务。如果到消费的时间,就继续执行下面操作:

如果获取到消息,则继续执行下面操作:

清除了消息的延迟级别,并且恢复了真正的消息主题和队列Id,重新把消息发送到真正的消息队列上以后,消费者就可以立即消费了。

总结

经过以上对源码的分析,可以总结出延迟消息的实现步骤:

如果消息的延迟级别大于0,则表示该消息为延迟消息,修改该消息的主题为SCHEDULE_TOPIC_XXXX,队列Id为延迟级别减1。

消息进入SCHEDULE_TOPIC_XXXX的队列中。

定时任务根据上次拉取的偏移量不断从队列中取出所有消息。

根据消息的物理偏移量和大小再次获取消息。

根据消息属性重新创建消息,清除延迟级别,恢复原主题和队列Id。

重新发送消息到原主题的队列中,供消费者进行消费。

三、kafka延时队列实现原理?

延迟队列存储的是对应的延迟消息,所谓“延迟消息”是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费。

基于消息的延迟:指为每条消息设置不同的延迟时间,那么每当队列中有新消息进入的时候就会重新根据延迟时间排序,当然这也会对性能造成极大的影响。

基于队列的延迟: 设置不同延迟级别的队列,比如5s、10s、30s、1min、5mins、10mins等,每个队列中消息的延迟时间都是相同的,这样免去了延迟排序所要承受的性能之苦,通过一定的扫描策略(比如定时)即可投递超时的消息。

四、Multisim中如何实现通电延时?

用延时继电器就可以实现延时了。

五、Multisim中如何实现信号延时?

如果第一个方波的占空比是50%,用一个反相器(非门)即可实现。

六、通电延时继电器如何实现循环?

按下启动,KA得电,时间继电器KT1,KT2同时开始计时,此时灯泡开始工作,工作10S后断电,又过10S后时间继电器KT2计时到达,复位KT1。

继电器是一种电控制器件。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。

通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

七、ttp223怎样实现延时关闭?

在设置里面选择关闭延时功能就可以了

八、温控仪如何实现延时停机?

是要开到最大位置的,因为冰箱内自身的温控器是靠热力膨胀的原理来实施开停机的,原理其实就象一个电灯的拉线开关。既然温控器已经是处于常闭位置了,就开了最大吧。今后怕它再老化变为常开位置,用了这个外置式的温控器,其实已经和自身的温控器没有很大的关系了,自身的温控器就起到一根导线的作用了。

外置的温控器一般调到开机15分钟,停机25分钟为佳。

还有此外置式的温控器只能用在直冷(有霜)式冰箱上;间冷(无霜风冷)式冰箱上是不能用的,因为无霜冰箱是有定时化霜装置的,如正好在化霜位置上会造成不启动的。

九、怎么延时?

接下来再给大家一些及时的延时小技巧,也就是第6点紧急方案。

①分散注意力,性爱的过程当中,如果把所有的注意力都集中在身体,性能量积累就会过快,适当的转移下注意力,想点别的事情,会暂缓射精的冲动。

②使用安全套和延时喷剂,这是降低龟头敏感度比较好的方法,注意选择正规的高品质的延时喷剂,避免造成其他的负面影响。

③暂停抽动,在性能量积累到差不多8级9级的时候,可以放慢抽动的频率或暂停抽动,比如换个姿势,或者俯身继续亲吻和抚摸女性,待射精紧迫感消失后再次进入。

④龟头挤捏法,在性能量积累到差不多8级9级的时候,也可暂停抽动,把阴茎抽出,并用拇指至于阴茎系带部位,食指和中指指腹至于阴茎另一面,冠状沟的上下方,从前向后施加压力,每挤捏三四下要放松一次,如此反复待射精,紧迫感消失后再次进入。

⑤牵拉阴囊和睾丸,当高度兴奋时,阴囊和睾丸会收缩并上举,所以在性爱高度兴奋时,可以适当轻轻下拉阴囊或睾丸来延长性爱时间

当然还有一些其他情况,例如工作压力太大,身体极度疲惫,这时候时间也可能会过快,处理的方法是可以选择在第2天清晨,身体得到较好的休息,状态恢复以后再性爱。

还有的异地,夫妻长期不能见面,积压的欲望太满,兴奋程度也可能会过高,那可以选择在适当的,先撸一发再做爱,这样第2次爱的时间就会比较长一些

十、在ARM汇编程序如何实现子程序的返回?

子程序进入时,返回地址保存在LR寄存器中,返回有两种做法:

将LR直接赋给PC:MOV PC, LR

直接跳转:BX LR

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片