6.8.3 qmgr_job_entry_select函数:选择QMGR_JOB、QMGR_PEER、QMGR_ENTRY结构体
2016-04-07 15:29
489 查看
/qmgr_job.c/qmgr_job_entry_select函数用来选择QMGR_JOB、QMGR_PEER、QMGR_ENTRY结构体。
当QMGR_TRANSPORT->slot_cost大于等于2时,使用preemptive message scheduling策略选择QMGR_JOB结构体:
if (transport->slot_cost >= 2)
job = qmgr_job_preempt(job);
否则QMGR_JOB结构体来自QMGR_TRANSPORT->job_current字段。
使用qmgr_peer_select函数选择QMGR_PEER结构体。该函数使用和qmgr_transport_select类似的方法进行选择。选择QMGR_PEER其实相当于选择QMGR_QUEUE,只不过这里的QMGR_PEER是根据QMGR_JOB来组织QMGR_QUEUE。
至此已经选定了QMGR_TRANSPORT和QMGR_QUEUE结构体。
接下来选择QMGR_ENTRY结构体:
entry =peer->entry_list.next
QMGR_ENTRY结构体按顺序选择即可,也就是当根据策略选择了smtp MDA和abc.com域后,zhangsan@abc.com和lisi@abc.com先发送哪个并不重要(虽然收件人地址可能会被qmgr_message_sort_compare函数排序)。
这里总结一下结构体的选择过程:
1 使用round borin策略选择QMGR_TRANSPORT结构体。
2 选择QMGR_JOB结构体,该结构体可能采用抢占式算法选定。
3 以QMGR_JOB结构体为核心,围绕着它选择QMGR_QUEUE结构体和QMGR_ENTRY结构体。QMGR_PEER结构体的选择也采用roundborin策略。
至此成功的完成了从QMGR_TRANSPORT结构体到QMGR_ENTRY结构体的选择,可以使用QMGR_ENTRY结构体中指向MDA的VSTREAM流与MDA通信了。
当QMGR_TRANSPORT->slot_cost大于等于2时,使用preemptive message scheduling策略选择QMGR_JOB结构体:
if (transport->slot_cost >= 2)
job = qmgr_job_preempt(job);
否则QMGR_JOB结构体来自QMGR_TRANSPORT->job_current字段。
使用qmgr_peer_select函数选择QMGR_PEER结构体。该函数使用和qmgr_transport_select类似的方法进行选择。选择QMGR_PEER其实相当于选择QMGR_QUEUE,只不过这里的QMGR_PEER是根据QMGR_JOB来组织QMGR_QUEUE。
至此已经选定了QMGR_TRANSPORT和QMGR_QUEUE结构体。
接下来选择QMGR_ENTRY结构体:
entry =peer->entry_list.next
QMGR_ENTRY结构体按顺序选择即可,也就是当根据策略选择了smtp MDA和abc.com域后,zhangsan@abc.com和lisi@abc.com先发送哪个并不重要(虽然收件人地址可能会被qmgr_message_sort_compare函数排序)。
这里总结一下结构体的选择过程:
1 使用round borin策略选择QMGR_TRANSPORT结构体。
2 选择QMGR_JOB结构体,该结构体可能采用抢占式算法选定。
3 以QMGR_JOB结构体为核心,围绕着它选择QMGR_QUEUE结构体和QMGR_ENTRY结构体。QMGR_PEER结构体的选择也采用roundborin策略。
至此成功的完成了从QMGR_TRANSPORT结构体到QMGR_ENTRY结构体的选择,可以使用QMGR_ENTRY结构体中指向MDA的VSTREAM流与MDA通信了。
相关文章推荐
- SQL Server 事务、异常和游标
- WEB免费打印控件推荐
- Mysql 中 iddata1的缩小步骤
- 游戏开发数值经验设计(10)
- Linux的进程/线程间通信方式总结 04
- 邮箱大师添加outlook2010 方法 图文详解
- iOS - QRCode(二维码)的生成和识别
- 6.8.2 qmgr_transport_select函数: 选择QMGR_TRANSPORT 与round borin策略
- SQL Server 索引和视图
- expandview可实现区域选择,可实现类似58筛选功能
- only available on JDK 1.5 and higher
- scala中的method和function的区别
- pca的具体应用QT+OPENCV人脸主成分提取和还原
- 基于.NET平台常用的框架整理
- SqlServer 汉字转换拼音首字母函数
- 自定义UICollectionViewLayout(一) ----LineLayout
- C++ map的基本操作和使用
- Android性能典范:拯救计划
- SQL Server T-SQL高级查询1
- 开始学习了(C++版)