6.8.3 qmgr_job_entry_select函数:选择QMGR_JOB、QMGR_PEER、QMGR_ENTRY结构体
来源:互联网 发布:部落冲突疗伤法术数据 编辑:程序博客网 时间:2024/05/17 09:14
/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通信了。
- 6.8.3 qmgr_job_entry_select函数:选择QMGR_JOB、QMGR_PEER、QMGR_ENTRY结构体
- 6.7.4 qmgr_message_assign函数:创建QMGR_JOB、QMGR_PEER、QMGR_ENTRY结构体
- 6.2.7 QMGR_PEER:跨域组织QMGR_JOB
- 6.8 发信过程中的结构体选择
- 结构体选择排序
- JS选择结构3
- 黑马程序员--c语言:选择结构、循环结构、函数
- 3-1-1 程序控制结构-选择结构
- NO3.java学习笔记(顺序结构、判断结构、选择结构、循环结构、函数)
- 对于结构体,什么时候分配内存以及为什么选择用malloc函数来分配结构体变量的地址
- C++实验3—选择结构程序设计-多分段函数求值
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 选择结构
- 结构选择
- C++实现——大数乘以小数
- 进程间通信的另类实现
- adb工具(通用的调试工具、debug工具)&操作命令详解
- java解析ajax之json字符串
- 从0开始搭建主流框架(纯代码)
- 6.8.3 qmgr_job_entry_select函数:选择QMGR_JOB、QMGR_PEER、QMGR_ENTRY结构体
- 利用请求头Referer防止盗链
- 纠结很久的问题 在SSH下,Dao Service 下 baseService 为NULL的问题
- 天下第一---(spfa判环)
- __declspec(novtable) 的用法 .
- 各大网站CSS代码初始化集合
- iOS-解决XCode7.3 上无法安装 Alcatraz PackageManager
- Eclipse中.xml , .propertise 为后缀的文件中文乱码
- 6.8.4 qmgr_job_cadidate函数: preemptive message scheduling策略