TaskScheduler的分析_3
来源:互联网 发布:淘宝生意参谋流量来源 编辑:程序博客网 时间:2024/05/01 14:40
前面提到了跟 DelayTask相关的一个链表,现在来看跟BackgroundHandling相关的另一个链表:
HandleSet.
这个链表跟:
setBackgroundHandling
disableBackgroundHandling
moveSocketHandling
这3个函数相关。
其中setBackgroundHandling根据第二个参数 int conditionSet 是否为零 对应于插入和删除节点的操作。
disableBackgroundHanding 对应删除节点操作。
moveSocketHandling 对应替换操作。
然后我们来看HandleSet有什么操作:
首先提一点的是HandleSet是一个单链表,只提供表头插入操作,但是删除操作不限于此。
assignHandler :第一步,查找 看这个节点是否在表里面,如果不在就新建一个节点,并插入表头。然后根据参数对节点的属性进行赋值。
clearHandler:清除节点
moveHandler:替换节点
还提供了一个函数 lookupHandler,这个函数是根据标志符来查找节点,
在这个函数实现的时候,用到了 HandlerIterator,这是一个跟节点相关的迭代器,但是这个迭代器只提供了 前移操作(++),所以另一方面也说明了这个链表是单链表(但是节点却提供了 指向前后节点的指针)。
下一步来看看节点:
HandlerDescriptor
这个节点里面除了包含指向前后节点的指针外还提供了下面一些属性:
int socketNum 跟这个节点相关的socket值
int conditionSet 标志位,跟socketNum相关,通过这个标识位,我们可以知道后面是要判断socket的可读,可写,还是 异常。
handlerProc 这是一个函数指针。可能到时候跟socketNum相关,比如这个socket上有数据来了,然后就调用这个函数
void* clientData 可能是上面这个函数指针的参数。
上面就是对跟TaskScheduler相关的第二个链表。
最后我们来看跟TaskScheduler相关的第三个链表:
严格来说这不是一个链表,而是两个数组:
fTriggeredEventHandlers
fTriggeredEventClientDatas
与之对应还有3个变量:
fTriggersAwaitingHandling
fLastUsedTriggerMask
fLastUsedTriggerNum
上面这些属性是跟下面这3个函数想对应的:
createEventTrigger
deleteEventTrigger
triggerEvent
第一个函数createEventTrigger相当于创建一个节点:在上面2个数组里面添加一个元素。第一个数组对应的是函数指针,第二个数组对应的函数参数(这个时候都是把参数设为NULL)。fLastUsedTriggerNum就是对应的在数组中的位置,fLastUsedTriggerMask对应的是掩码(标识符)。
第二个函数deleteEventTrigger对应的是删除节点,那么主要就是把数组对应位上的值置为空,然后是把fTriggersAwaitingHandling对应的标志位置为0.
第三个函数triggerEvent 表明某个事件该触发了,在这里是通过把fTriggersAwaitingHandling对应的标志位置为1来实现的。
上面就是跟TaskScheduler相关的数据结构以及对应的函数了,注意我们还有一个最重要的函数doEventLoop 没说,后面有时间就把这个函数的实现来分析下。
- TaskScheduler的分析_3
- TaskScheduler的分析_1
- TaskScheduler的分析_2
- TaskScheduler的分析_4
- Spark分析之TaskScheduler
- TaskScheduler
- 导弹力学分析_3
- Spark的TaskScheduler和DagScheduler
- Spark的TaskScheduler和DagScheduler
- Spark的TaskScheduler和DagScheduler
- DAGScheduler 和 TaskScheduler 的关系
- Spark Core Runtime分析: DAGScheduler, TaskScheduler, SchedulerBackend
- Spark Core Runtime分析: DAGScheduler, TaskScheduler, SchedulerBackend
- Spark Core Runtime分析: DAGScheduler, TaskScheduler, SchedulerBackend
- Spark Core Runtime分析: DAGScheduler, TaskScheduler, SchedulerBackend
- Spark源码分析之Scheduler模块(TaskScheduler)
- Spark Core Runtime分析: DAGScheduler, TaskScheduler, SchedulerBackend
- spark调度分析: DAGScheduler, TaskScheduler, SchedulerBackend
- C#.Net上传文件大小限制设置
- 改变linux终端颜色[转]------solaris也适用,我已经测试
- C语言中return和exit的区别
- ExtJS 4 Beta 2预览:Ext.Brew包
- Android杂七杂八
- TaskScheduler的分析_3
- 出国清单
- 纯css制作圆角矩形边框
- JAVA中关于IO流中的字符流和字节流的个人总结
- The Tao of Programming
- u-boot-2011.03在TQ2440上的移植(5)—实现Nand/Nor 双启动
- 面对对象的三大特点
- Android——事件侦听器Event Listeners
- ToHeart2 XRATED 简体中文版攻略