還覺得圖沒錯(cuò)的悠栓,看個(gè)源碼不費(fèi)多少功夫。。鬼譬。
看源碼就知道细层,dispatch并沒有被等同于source1墩划,本身就是兩個(gè)else:
...
handle_msg:;
...
else if (livePort == dispatchPort) {
CFRUNLOOP_WAKEUP_FOR_DISPATCH();
...
__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__(msg);
...
} else {
CFRUNLOOP_WAKEUP_FOR_SOURCE();
...
sourceHandledThisLoop = __CFRunLoopDoSource1(rl, rlm, rls, msg, msg->msgh_size, &reply) || sourceHandledThisLoop;
...
}
GCD就是GCD蜂桶,source1就是source1,雖然都是基于端口交排,但是處理完全不同划滋。
關(guān)于runloop,好多人都理解錯(cuò)了埃篓!跟多數(shù)開發(fā)者一樣处坪,我也曾經(jīng)迷惑于runloop,最初只了解可以通過runloop一些監(jiān)聽事件的通知來做一些事情架专,優(yōu)化性能同窘。關(guān)于runloop源碼的基礎(chǔ)知識(shí),本文不做論述部脚,可以...