deferred Transports Protocols 简单介绍
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
Twisted架構(gòu)概覽
Twisted是一個(gè)事件驅(qū)動(dòng)型的網(wǎng)絡(luò)引擎。由于事件驅(qū)動(dòng)編程模型在Twisted的設(shè)計(jì)哲學(xué)中占有重要的地位,因此這里有必要花點(diǎn)時(shí)間來(lái)回顧一下究竟事件驅(qū)動(dòng)意味著什么。
事件驅(qū)動(dòng)編程是一種編程范式,這里程序的執(zhí)行流由外部事件來(lái)決定。它的特點(diǎn)是包含一個(gè)事件循環(huán),當(dāng)外部事件發(fā)生時(shí)使用回調(diào)機(jī)制來(lái)觸發(fā)相應(yīng)的處理。另外兩種常見(jiàn)的編程范式是(單線程)同步以及多線程編程。
讓我們用例子來(lái)比較和對(duì)比一下單線程、多線程以及事件驅(qū)動(dòng)編程模型。圖21.1展示了隨著時(shí)間的推移,這三種模式下程序所做的工作。這個(gè)程序有3個(gè)任務(wù)需要完成,每個(gè)任務(wù)都在等待I/O操作時(shí)阻塞自身。阻塞在I/O操作上所花費(fèi)的時(shí)間已經(jīng)用灰色框標(biāo)示出來(lái)了。
圖21.1 線程模型
在單線程同步模型中,任務(wù)按照順序執(zhí)行。如果某個(gè)任務(wù)因?yàn)镮/O而阻塞,其他所有的任務(wù)都必須等待,直到它完成之后它們才能依次執(zhí)行。這種明確的執(zhí)行順序和串行化處理的行為是很容易推斷得出的。如果任務(wù)之間并沒(méi)有互相依賴的關(guān)系,但仍然需要互相等待的話這就使得程序不必要的降低了運(yùn)行速度。
在多線程版本中,這3個(gè)任務(wù)分別在獨(dú)立的線程中執(zhí)行。這些線程由操作系統(tǒng)來(lái)管理,在多處理器系統(tǒng)上可以并行處理,或者在單處理器系統(tǒng)上交錯(cuò)執(zhí)行。這使得當(dāng)某個(gè)線程阻塞在某個(gè)資源的同時(shí)其他線程得以繼續(xù)執(zhí)行。與完成類似功能的同步程序相比,這種方式更有效率,但程序員必須寫代碼來(lái)保護(hù)共享資源,防止其被多個(gè)線程同時(shí)訪問(wèn)。多線程程序更加難以推斷,因?yàn)檫@類程序不得不通過(guò)線程同步機(jī)制如鎖、可重入函數(shù)、線程局部存儲(chǔ)或者其他機(jī)制來(lái)處理線程安全問(wèn)題,如果實(shí)現(xiàn)不當(dāng)就會(huì)導(dǎo)致出現(xiàn)微妙且令人痛不欲生的bug。
在事件驅(qū)動(dòng)版本的程序中,3個(gè)任務(wù)交錯(cuò)執(zhí)行,但仍然在一個(gè)單獨(dú)的線程控制中。當(dāng)處理I/O或者其他昂貴的操作時(shí),注冊(cè)一個(gè)回調(diào)到事件循環(huán)中,然后當(dāng)I/O操作完成時(shí)繼續(xù)執(zhí)行。回調(diào)描述了該如何處理某個(gè)事件。事件循環(huán)輪詢所有的事件,當(dāng)事件到來(lái)時(shí)將它們分配給等待處理事件的回調(diào)函數(shù)。這種方式讓程序盡可能的得以執(zhí)行而不需要用到額外的線程。事件驅(qū)動(dòng)型程序比多線程程序更容易推斷出行為,因?yàn)槌绦騿T不需要關(guān)心線程安全問(wèn)題。
當(dāng)我們面對(duì)如下的環(huán)境時(shí),事件驅(qū)動(dòng)模型通常是一個(gè)好的選擇:
程序中有許多任務(wù),而且…
任務(wù)之間高度獨(dú)立(因此它們不需要互相通信,或者等待彼此)而且…
在等待事件到來(lái)時(shí),某些任務(wù)會(huì)阻塞。
當(dāng)應(yīng)用程序需要在任務(wù)間共享可變的數(shù)據(jù)時(shí),這也是一個(gè)不錯(cuò)的選擇,因?yàn)檫@里不需要采用同步處理。
網(wǎng)絡(luò)應(yīng)用程序通常都有上述這些特點(diǎn),這使得它們能夠很好的契合事件驅(qū)動(dòng)編程模型。
Transports
Transports代表網(wǎng)絡(luò)中兩個(gè)通信結(jié)點(diǎn)之間的連接。Transports負(fù)責(zé)描述連接的細(xì)節(jié),比如連接是面向流式的還是面向數(shù)據(jù)報(bào)的,流控以及可靠性。TCP、UDP和Unix套接字可作為transports的例子。它們被設(shè)計(jì)為“滿足最小功能單元,同時(shí)具有最大程度的可復(fù)用性”,而且從協(xié)議實(shí)現(xiàn)中分離出來(lái),這讓許多協(xié)議可以采用相同類型的傳輸。Transports實(shí)現(xiàn)了ITransports接口,它包含如下的方法:
write???????????????????以非阻塞的方式按順序依次將數(shù)據(jù)寫到物理連接上 writeSequence???????????將一個(gè)字符串列表寫到物理連接上 loseConnection??????????將所有掛起的數(shù)據(jù)寫入,然后關(guān)閉連接 getPeer?????????????????取得連接中對(duì)端的地址信息 getHost?????????????????取得連接中本端的地址信息將transports從協(xié)議中分離出來(lái)也使得對(duì)這兩個(gè)層次的測(cè)試變得更加簡(jiǎn)單。可以通過(guò)簡(jiǎn)單地寫入一個(gè)字符串來(lái)模擬傳輸,用這種方式來(lái)檢查。
Protocols
Protocols描述了如何以異步的方式處理網(wǎng)絡(luò)中的事件。HTTP、DNS以及IMAP是應(yīng)用層協(xié)議中的例子。Protocols實(shí)現(xiàn)了IProtocol接口,它包含如下的方法:
makeConnection???????????????在transport對(duì)象和服務(wù)器之間建立一條連接 connectionMade???????????????連接建立起來(lái)后調(diào)用 dataReceived?????????????????接收數(shù)據(jù)時(shí)調(diào)用 connectionLost???????????????關(guān)閉連接時(shí)調(diào)用轉(zhuǎn)載于:https://my.oschina.net/u/1458120/blog/549118
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的deferred Transports Protocols 简单介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 孕妇梦到双胞胎男孩是什么意思
- 下一篇: 梦到对象跟别人结婚了是什么意思