NS by Example 笔记(3)Event Scheduler

Event Scheduler

 

 

NS的离散的事件调度机制。 事件调度机制的主要用途是网络组件模拟包处理时的延迟或计时器。Figure 5 演示每个网络对象使用一个事件调度器。 注意一个网络对象发起一个事件后,这个事件将交给同一个对象(发起者)来处理当到达预定的时间。  网络对象之间的data path 与他们的 event path 不同。实际上, 当数据包从一个网络对象传到另一个发送者sender使用 send(Packet* p) {target_->recv(p)}; 方法并且接收者receiver使用 recv(Packet*, Handler* h = 0) 方法。

 




 
Figure 5. Discrete Event Scheduler

 

NS 有2种事件调度器event schedulers。 real-time 和 非 real-time。 非 real-time 调度器可以使用List, Heap and Calendar这3种工具implementations,尽管他们在逻辑执行上是一样的。产生这个现象是由于向后的兼容性: 一些早期的用户加入的网络组件的实现中可能使用一种特定的调度器,这个调度器并非通过公共的函数得到而是内部使用的。 默认的非 real-time 调度器是 Calendar。 real-time 调度器用于仿真, 允许模拟程序与真实的网络交互。目前还在开发中。下面是选择一个明确的事件调度器的例子: 

 

. . .
set ns [new Simulator]
$ns use-scheduler Heap
. . .  

 

 

另一个事件调度器的用途是去安排事件, 比如当一个FTP应用程序开始, 当一个模拟结束, 或者在模拟开始前生成模拟场景。一个事件调度器对象含有一个调度函数 at time "string" , 他发起一个特殊的事件叫 AtEvent 在特定的simulation time。 "AtEvent" 实际上是"Event"的子类, 他添加了一个额外的变量去带入被给予的 string。 然而,他被视为普通的事件。 在模拟开始后, 当AtEvent预定的时间到达时, AtEvent被传递到 "AtEvent handler" 处理程序(AtEvent handler只需建立一次并且处理所有的 AtEvent), 并且定义在AtEvent中的 string 中的 OTcl命令开始执行。 下面是在上面例子的基础上加入了一个模拟事件调度的代码。

 

. . .
set ns [ew Simulator]
$ns use-scheduler Heap
$ns at 300.5 "complete_sim"
. . .

proc complete_sim {} {
. . .
} 

 

 

上面 at time "string" 是模拟对象(set ns [new Simulator])的一个成员函数。 但是这个模拟对象只是起一个用户界面的作用, 并且实际上他调用网络对象或调度器对象的成员函数去做实际的工作。 下列的是部分名单和简要描述关于模拟对象的成员函数, 这些函数与调度器的成员函数相接应。(Simulator object member functions that interface with scheduler member functions):

 

Simulator instproc now # return scheduler's notion of current time
Simulator instproc at args # schedule execution of code at specified time
Simulator instproc at-now args # schedule execution of code at now
Simulator instproc after n args # schedule execution of code after n secs
Simulator instproc run args # start scheduler
Simulator instproc halt # stop (pause) scheduler

 

 

<think>嗯,用户问的是关于Navicat中的MySQL事件调度器。首先,我需要确认用户具体想知道什么。可能他们想知道如何在Navicat里创建、管理事件,或者事件调度器的基本概念和使用方法。 首先,我应该解释MySQL事件调度器是什么。它是MySQL中用于定期执行任务的机制,类似于计划任务。然后,用户可能想了解如何在Navicat这个图形界面工具中操作,而不是通过命令行。所以需要分步骤说明如何在Navicat中创建和管理事件。接下来,可能涉及启用事件调度器,因为有时候默认是关闭的。需要提到如何检查event_scheduler的状态,以及如何开启它,比如SETGLOBAL event_scheduler = ON;。 然后,具体的创建步骤,比如在Navicat中连接到数据库,找到事件选项,新建事件,设置定义、计划、开始和结束时间等。可能还需要提供示例代码,比如创建一个每天执行的事件,插入数据到某个表。还要注意事件的启用状态,确保用户知道保存后需要启用事件。另外,权限问题也很重要,用户需要有EVENT权限才能创建事件。 可能用户遇到的问题包括事件没有执行,这时候需要检查event_scheduler是否开启,事件是否处于ENABLE状态,以及是否有语法错误。此外,日志记录也是一个排查问题的方法,比如在事件中添加插入日志的语句。 最后,给出一些相关问题,帮助用户深入理解,比如事件调度器的作用、开启方法、Navicat中的创建步骤、权限问题、验证执行情况以及查看事件定义的方法。</think>事件调度器(Event Scheduler)是MySQL数据库内置的任务调度系统,用于周期性执行SQL语句或存储过程。在Navicat中操作事件调度器的实现方式如下: 1. **启用事件调度器**(需SUPER权限) ```sql -- 检查当前状态 SHOW VARIABLES LIKE &#39;event_scheduler&#39;; -- 启用调度器 SET GLOBAL event_scheduler = ON; ``` 2. **创建事件示例**(Navicat图形界面操作) ```sql CREATE EVENT daily_cleanup ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY DO BEGIN DELETE FROM log_table WHERE created_at < NOW() - INTERVAL 30 DAY; INSERT INTO cleanup_log VALUES (NOW(), &#39;Daily cleanup executed&#39;); END ``` 3. **Navicat操作路径**: - 连接数据库 → 左侧导航栏选择"事件" → 右键"新建事件" - 定义页签:填写SQL逻辑 - 计划页签:设置执行频率(可配置单次/循环) - 高级页签:设置开始/结束时间、状态等 **常见问题原因**: - 事件未执行:可能由于事件调度器未启用(默认OFF状态) - 权限不足:用户缺少EVENT权限或SUPER权限 - 时间设置错误:时区不一致导致调度时间计算错误 - SQL错误:事件中的SQL语句存在语法或逻辑错误 **调试建议**: 1. 查看事件状态: ```sql SHOW EVENTS LIKE &#39;daily_cleanup&#39;\G ``` 2. 检查错误日志: ```sql SELECT * FROM mysql.event; ``` 3. 添加日志记录(如示例中的cleanup_log表)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值