官术网_书友最值得收藏!

1.5.4 Windows Runtime的線程模型

1.線程模型

· Windows Runtime與COM的線程模型相同,基于Apartments。

· 非GUI對(duì)象是MTA的,而GUI對(duì)象是STA的。

· STA在程序啟動(dòng)時(shí)創(chuàng)建,STA運(yùn)行所有的UI代碼以及負(fù)責(zé)傳遞消息,不允許重入。

1)STA

一個(gè)對(duì)象只能由一個(gè)線程訪問(wèn)(通過(guò)對(duì)象的接口指針調(diào)用其方法),其他線程不得訪問(wèn)這個(gè)對(duì)象,因此對(duì)于這個(gè)對(duì)象的所有調(diào)用都是同步的,對(duì)象的狀態(tài)(也就是對(duì)象的成員變量的值)肯定是正確變化的,不會(huì)出現(xiàn)線程訪問(wèn)沖突而導(dǎo)致對(duì)象狀態(tài)錯(cuò)誤。其他線程要訪問(wèn)這個(gè)對(duì)象,必須等待,直到那個(gè)唯一的線程空閑時(shí)才能調(diào)用對(duì)象。這個(gè)模型很像Windows提供的窗口消息運(yùn)行機(jī)制,因此這個(gè)線程模型非常適合于擁有界面的組件。

2)MTA

一個(gè)對(duì)象可以被多個(gè)線程訪問(wèn),即這個(gè)對(duì)象的代碼在自己的方法中實(shí)現(xiàn)了線程保護(hù),保證可以正確改變自己的狀態(tài)。這對(duì)于作為業(yè)務(wù)邏輯組件或用于后臺(tái)服務(wù)的組件非常適合。因?yàn)樽鳛橐粋€(gè)分布式的服務(wù)器,同一時(shí)間可能有幾千條服務(wù)請(qǐng)求到達(dá),如果排隊(duì)進(jìn)行調(diào)用,那么將是不能想像的。

注意:這也只是一個(gè)要求、希望、協(xié)議而已。

3)Apartment

被翻譯成套間或是單元,是線程模型的一個(gè)實(shí)現(xiàn)者,就像在操作系統(tǒng)課程中講到的線程只是一個(gè)數(shù)學(xué)模型,而Windows的線程、進(jìn)程是它(數(shù)學(xué)模型的線程、進(jìn)程)的實(shí)現(xiàn)者。套間只是邏輯上的一個(gè)概念,實(shí)現(xiàn)時(shí)只是一個(gè)結(jié)構(gòu)(由WinRT管理)而已,記錄相關(guān)信息,如它的種類(只能是上面那三個(gè),至少現(xiàn)在是),并由WinRT根據(jù)那個(gè)結(jié)構(gòu)進(jìn)行相應(yīng)的處理。

2.異步模型

異步方法旨在成為非阻塞操作。當(dāng)?shù)却娜蝿?wù)運(yùn)行時(shí),在異步方法的一個(gè)等待表達(dá)式不會(huì)阻止當(dāng)前線程。相反,該表達(dá)式注冊(cè)該方法的其余部分作為繼續(xù)并返回控制對(duì)異步方法的調(diào)用方法。

Windows Runtime中的異步方法都是以Async結(jié)尾的,并且返回IAsyncOperation<T>。在調(diào)用時(shí)通過(guò)await關(guān)鍵字等待異步方法執(zhí)行。異步方法運(yùn)行在后臺(tái)線程里,在后臺(tái)線程里不能訪問(wèn)UI的元素,當(dāng)任務(wù)完成時(shí)如果需要將結(jié)果封送返回給UI線程,可以用CoreDispatcher類實(shí)現(xiàn),否則會(huì)報(bào)跨線程操作的異常。

主站蜘蛛池模板: 仙游县| 措勤县| 黄梅县| 读书| 沈丘县| 江都市| 柏乡县| 特克斯县| 安福县| 定州市| 沂水县| 汶上县| 汤阴县| 大宁县| 普安县| 莫力| 禄劝| 奉贤区| 嵩明县| 哈巴河县| 丹寨县| 罗平县| 洪湖市| 黑龙江省| 盈江县| 昭觉县| 建湖县| 靖远县| 禄丰县| 乐平市| 黑山县| 八宿县| 武安市| 泰安市| 贺兰县| 湄潭县| 桐城市| 银川市| 德安县| 攀枝花市| 张家界市|