1,回調(diào)函數(shù)。
回調(diào)函數(shù)的原理是使用函數(shù)指針實(shí)現(xiàn)類似“軟中斷”的概念。
比如在上層的兩個(gè)函數(shù)A和B,把自己的函數(shù)指針傳給了C,C通過調(diào)用A和B的函數(shù)指針達(dá)到“當(dāng)做了什么,通知上層來調(diào)用A或者B”的目的。
從更底層的角度上,代碼之間都是在一段程序里面或者可以理解為一致代碼段的跳轉(zhuǎn)。通過標(biāo)準(zhǔn)的call ret就可以實(shí)現(xiàn)的。
A
C
B
|--upper layer--|--lower layer--|
2,中斷處理函數(shù)。
首先,要了解CPU的底層處理機(jī)制。CPU對(duì)中斷,錯(cuò)誤的處理有三種:
1,錯(cuò)誤(fault),這種處理方式會(huì)跳到錯(cuò)誤的處理程序中,當(dāng)從錯(cuò)誤的處理程序返回,會(huì)重新執(zhí)行當(dāng)前的指令(再執(zhí)行一遍出錯(cuò)的那條指令)
2,陷阱(trap),也會(huì)跳到陷阱的處理函數(shù)中中斷函數(shù)可重入是什么,當(dāng)從陷阱函數(shù)中返回,執(zhí)行下一條指令。
3,異常(abort),異常終止當(dāng)前程序。
其實(shí)對(duì)于中斷,類似于trap的過程。表面看來,他和回調(diào)函數(shù)都是一樣的概念,都是,
發(fā)生中斷--->跳到中斷處理函數(shù)里面--->回到中斷點(diǎn)下一條--->清中斷,
但是中斷與回調(diào)的區(qū)別和聯(lián)系是中斷函數(shù)可重入是什么,
1,中斷可能實(shí)現(xiàn)不同優(yōu)先級(jí)代碼的跳轉(zhuǎn)。比如我發(fā)生了軟中斷,比如接到一個(gè)信號(hào),我就要跳到信號(hào)處理函數(shù)里面執(zhí)行,但是本身實(shí)現(xiàn)信號(hào)處理函數(shù)跳轉(zhuǎn)的,是一個(gè)內(nèi)核級(jí)的代碼段。
2,有些中斷,是通過回調(diào)實(shí)現(xiàn)的,比如windows的視頻采集,就是一個(gè)幀中斷,但是你注冊(cè)給上層的是一個(gè)回調(diào),
3,關(guān)于中斷的可重入,這個(gè)和回調(diào)不同,具體這又是一個(gè)話題了。
4,應(yīng)用場合不同。