劉儒香
(亳州學院 電子與信息工程系,安徽 亳州 236800)
試論當前網絡程序設計中的復雜性
劉儒香
(亳州學院 電子與信息工程系,安徽 亳州 236800)
科學技術的不斷發展使互聯網成為了當前社會生活和經濟發展不可缺少的信息基礎設施.但是網絡環境較為復雜,缺乏一定的安全性,基于網絡環境,傳統網絡程序設計開發受到了前所未有的阻礙,出現了很多并發性問題,使網絡程序開發效率不斷降低.針對網絡程序設計受到并發性問題影響的問題,本文從網絡程序設計現狀和并發復雜性的實質出發,對網絡程序設計中的并發復雜性問題進行詳細的探討,以期為相關的研究提供相應的意見.
網絡程序設計;并發復雜性;實質;模型
近年來,傳統程序設計方法無法應用于當前開發高質量網絡程序中,這是因為傳統的單機環境與當前的網絡環境存在較大的差異,這些差異體現于網絡環境與單機環境之間的分布、結構、并發性以及延誤等多種問題方面,一旦這些問題整體結合,網絡程序設計就更加難以正常開展.并發性是阻礙網絡程序設計的主要因素,由于并發處理方法影響著軟件模板可組合性,進而導致網絡程序設計中的部分問題難以得到正常解決.因此,網絡程序設計者應該重視并發性管理,以合理的并發處理模型,盡力降低網絡陳雪開發難度.
1.1 網絡程序設計的現狀
程序使用過程中,網絡程序設計與單機程序之間存在較大的差異,由于二者之間的運行環境并不相同,這就給網絡程序帶來了較大的阻礙.當今時代已經進入了信息化時代,社會的發展與進步離不開網絡,當前很多軟件、設備都擁有網絡功能,網絡技術被應用于生活、生產的方方面面,同時也轉變了很多工作模式.基于這樣的大背景,網絡程序設計得到了空前的發展,與此同時,人們生活水平的不斷提高,對網絡程序設計的要求也隨之增高,但是傳統網絡程序設計方法已經無法滿足當代高品質網絡程序設計要求,因此,完善網絡程序設計方法已經成為了網絡程序工作中亟待解決的問題[1].針對此,網絡程序設計者努力對網絡程序設計中存在的缺陷進行不斷優化和改進.但是,就是因為向著這一目標的不斷努力,程序設計者逐漸發現并沒有辦法可以很好地解決這些并發復雜性問題,極大地阻礙了網絡程序設計的發展.針對這一現狀,網絡程序設計應該立足于當前發展的實際情況,對單機環境與網絡環境中存在的差異進行整體調整,從細節和整體上對整個網絡程序設進行完善,提高網絡程序模型性能,縮小并發復雜性問題的處理規模,促進網絡程序設計的發展與進步.
1.2 網絡程序并發復雜性實質
并發主要是指在一個時間段中,網路程序中的某幾個程序同時處于已經啟動運行到運行完畢的狀態中,且這個程序都同時在同一個處理機上運行,在這一個整個過程中,雖然一個處理機上有多個程序運行,但是任意一個時刻點上只有一個程序在處理機上運行.具體來說,所謂“并發”,從全局的角度來看就是“串聯”,這個與在單核處理器上,多線程運行于單人計算機相似.并發與并行存在很多相似的地方,但是二者在處理方法中存在實質性差異,并發復雜性處理可以針對單機程序設計中存在的并發問題進行有針對性的解決,這對于網絡程序設計有重要意義.并發性問題主要存在于網絡操作系統中,處理并發性問題應該根據問題的實際情況,采用合理的方法和正確觀念.雖然相關的研究者針對解決并發性問題研究了很長時間,但是并未發現哪一種方法能夠徹底解決并發性問題.當前的處理方法大部分都是基于事件的驅動并發模型以及多線程模型,這兩種模型各有優點和缺點,且在不同的環境下,產生的作用也大不相同,因此,在本質上沒有什么模型比另一個模型優質的說法,選用什么模型主要是取決于什么環境.
2.1 事件驅動并發模型
目前的計算機大部分都是使用馮·諾依曼所設計的計算機模型,但是,這種類型的計算機模型往往都需要依靠其他信息驅動來運行,即基于事件驅動并發模型,這種計算機模型與數據流驅動的計算機模型顯示.事件驅動并發模型被廣泛應用于現當代的網絡程序設計中,網絡程序設計者還可以按照操作調配時機,分為反應模式和前攝模式[2].其中,反應模式是指在數據滿足相應的條件的基礎上,進行相應的操作;前攝模式則是指先進行相應的操作,然后再等待事件完成.
基于事件的驅動并發模型,在對事件的維護以及函數運行時間的處理上,基本都是通過事件分派器來進行處理,例如:函數之間的通信主要是依靠事件完成,事件維護是通過事件分配器完成.在這種模型下,函數完成了特定的操作后,將CPU控制權又交還出來,進而通過事件分派器來做進一步的處理.與此同時,該模型會立足于事件上次沒有完成的進度繼續跟進,這樣就反轉了CPU的控制權.從上述的內容來看,基于事件的驅動并發模型主要是通過事件分派器對任務關系進行處理,并對函數進行拆分,促使函數分裂.假如在事件分派器處理任務的過程中,出現問題,導致大量函數分裂,則會增加程序調試難度,并造成計算機內存泄漏.總體而言,基于事件驅動并發模型在被調用的過程中,需要進行函數分裂,主要會導致函數內部細節暴露,函數穩定性降低,進而降低基于事件驅動并發模型板塊重復使用性,對計算機整體性能造成破壞.
2.2 多線程并發模型
多線程并發模型與基于事件驅動并發模型具有一定的相似性,而菏澤都可以分為兩種調度類型,不同的是,多線程并發模型主要分為搶占式模型和協作式模型.所謂搶占式模型主要是指計算機系統內核調度和管理線程,這種調度類型下,應用層不會控制線程的運行.另外,協作式模型主要是指應用層以協作的方式進行任務線程運行.兩種調度方法在本質上存在較大的差別,因此,二者所表現出的特征以及并發性問題也存在很大的區別,值得注意的是,二者不存在哪一個方法優質哪一個方法劣質的說法,兩種調度方法各有其優點和缺點.
在搶占式調度方法中,計算機CPU控制權依靠于調度器的管理,但是,調度器知識對線程進行強制性調度,基于這種調度模式,調度器很有可能在一個不能暫停線程的時候,反而將計算機CPU的控制權強制轉移到另一個線程上,這就容易造成上一個線程沒有妥善處理當前線程所需要的數據,進而造成數據見的惡意競爭,情況嚴重還容易導致計算機程序崩潰[3].
協作式多線程調度方法與搶占式調度方法不同,協作式多線程調度方法不會出現CPU控制權的強制性轉移現象,只有在當前線程放棄了CPU的控制權的情況下,CPU的控制權才會轉移到其他的線程.協作式調度模型可以充分發揮處理器的并行能力,但是在協作調度方法下,實時性較差,導致在對實時性有高要求的任務中,適合采用搶占式調度方法.只是愛大多數情況下,多線程并發模型靈活性高于基于事件驅動并發模型.另外,多線程協作應用于不同的計算機系統中時,線程代碼之間的移植具有較大的困難,這降低了多線程模型的適應性.例如:在Windows系統中,可以支持搶占式線程方法和協作式線程方法同時應用,但是標準的Linux中只允許搶占式線程,在某部分資源有限的計算機系統中,多線程并發模型更加不被支持.
2.3 派生并發模型
派生并發模型中期貨是被應用最廣泛的一種派生并發模型,期貨會立刻返還一個關于任何表達式N的期貨,并在同一時間并發對X的主動求值[4].求值完成后所得出的結果取代之前產生的期貨,從本質上來看,期貨就在產生的時候就沒有確定,只有值求出后,才能處于確定狀態.使用期貨在很大程度上可以消除并發管理,甚至程序設計者都不用指導所使用的程序是否是期貨程序,也不用知道期貨是否處于確定狀態,大部分并發管理的相關內容都集中于產生期貨的程序中,在對問題的處理過程中,除了明確任務能不能被并發執行以外,還要根據程序多線程并發處理方式或者基于事件驅動并發方式來進行任務的處理,當任務處理完成后,期貨才能夠處于確定狀態.從當前的多核并行計算環境來看,期貨受到了更加廣泛的關注,盡管期貨擁有很多優點,但是因為主流程序設計語言并不支持期貨,導致在實際應用中較少.總而言之期貨主要來源于分布式計算,是一種適用于管理并行復雜性的有效措施之一.
2.4 混合性并發模型
基于事件驅動并發模型與多線程并發模型組處理當前網絡程序設計并發復雜性問題的主要方法,這兩種處理方法各有其優點和缺點,結合二者的優點所建立的新型處理方式被稱作混合性并發模型.這種模型的運行原理,就是把網絡程序進行形式化的轉換促進驅動間能夠完成良好的協作驅動.從當前的網絡程序設計現狀來看,已經有良好的技術基礎,可以支持事件驅動和多線程、派生等多種并發模型的應用,但是在處理任務的過程中具有較大的復雜性,因此缺乏一種針對發生異常突發情況的處理機制.從從總體上來看,至今為止還沒有一種全面的、系統的方法將多種模型融合起來,盡管混合性并發模型已經結合了多種模型中的優點,但是其通用性能較差,再加上混合性并發模型研發時間短,實踐時間不長,還有待完善,因此在實際應用中并沒有得到良好的效果.
并發復雜性問題普遍存在于網絡程序設計中,且在網絡信息化的大環境下,這種問題只會越來越突出,研究人員應該將其設置為網絡程序設計領域中的重點研究問題.在網絡信息化發展的長河中,盡管有很多研究者對并發性問題有所研究,但是仍然缺乏系統的、完善的技術應用來解決并發性復雜問題[5].利用當前的網絡技術只能通過不斷提高并發問題解決能力來進行網絡設計的完善,而且上述并發模型都擁有較大的發展空間,加入對軟件進行細致分類,縮小處理規模,這對于并發問題的解決具有較大的促進作用.
總而言之,網絡程序設計的并發復雜性是一個無法避免的問題,從當前的網絡技術現狀來看,并沒有系統有效的措施來徹底解決這一系列并發復雜性問題.因此,網絡程序設計者應該從當前的實際情況出發,不斷強化自身的網絡程序并發處理能力,完善并發模型的性能,盡量縮小并發處理規模,充分發揮網絡程序的優質性能,使網絡程序設計可以正常順利地開展.
〔1〕楊文福,王捷.網絡系統設計中的程序設計并發復雜性[J].信息通信,2016,19(1):110-111.
〔2〕高偉,張學紅.關于網絡程序設計中的并發復雜性研究[J].網絡安全技術與應用,2014,15(12):49-51.
〔3〕林赟煌.關于網絡程序設計中的并發復雜性的幾點思考[J].民營科技,2016,22(9):89.
〔4〕胡泳霞.基于內存模型的 Java并發編程[J].電子測試,2016,17(13):89-90.
〔5〕盧棟棟,何清法.基于多線程的并行實例恢復方法[J].計算機應用,2016,36(4):1002-1007.
TP311.10
A
1673-260X(2017)04-0028-02
2017-02-09
2015年安徽省省級計算機應用技術專業綜合改革試點(2015ZY078)