青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 16, 文章 - 0, 評論 - 55, 引用 - 0
數據加載中……

多進程的構架方法

  做了4、5年的開發,大大小小的項目也做了不少,但以前都有一個致命的問題,不知不覺就會寫出一個巨大的主程序出來,層次復雜,編碼痛苦,調試困難。但似乎大家都認同這樣的開發方式,雖然都知道界面和功能分離是好事情,但就是做不到。我自己也曾痛苦的思考過,但沒有什么收效,似乎在Windows下的開發只能是這么痛苦。

  一星期前買了<<unix編程藝術>>,這一周可謂改天換地,每天都在閱讀和思考中度過,想必武俠小說中的武功大進也就是這個意思了。雖然書還沒看完,但是有些話實在是不吐不快。

   什么是界面?界面就是功能的子集。沒有哪個界面能反映所有的功能,但是若沒有界面,對于最終用戶來說又是不可忍受的,無論如何都不能指望讓一個門衛學會輸入復雜的命令來完成工作,雖然最終用戶也包括專業人士,但這世界上終究普通人更多。在這樣的前提下,可以認為功能永遠比界面更寬泛,更有適應性,而GUI更狹窄,更具有特殊性,所以將界面和功能進行分拆也就成為一種必然趨勢。

  但是如何分拆?在Windows的世界里,一個普遍觀點就是DLL。DLL很好,但是還不夠好,因為無法直接使用、調試以及升級,帶來的問題遠比好處多。另一種方法就是在代碼級進行分層,比如GUI一層,功能一層,再用膠合層將二者整合。且不論膠合層的不可復用和調試困難,就一條,如何能做到GUI崩潰的時候卻不影響功能的實現?以前我做過的項目都是這樣處理的,直接的后果就是項目越到后期問題越多,代碼越不接受變化。調試花費了大量的人力物力,收效卻未必好,功能的一點點小修改就會造成代碼里出現意大利面條。你可以說只要前期的小心規劃和仔細架構就能避免這些問題,但是誰能準確預測未來?無論做怎樣的努力,你也不能保證現在的功能永遠不變,永遠不變的恰恰就是變。如果不能保持實現的穩定性和較好的移植性,這樣的項目下場一般都不太好。

  說了這么多廢話,還是趕緊進入正題。談談這一周來的心得體會!

  首先,變化是漸進的,非突變式的。如果能將變化的所在約束在一個比較小的代碼范圍內,修改就不會成為噩夢。怎么約束?就一個要求:在保證完整性的條件下讓每個模塊包含的功能盡量單一和足夠小。首先是保證完整性,不是代碼足夠短,包含的實現足夠少就是完整,要達到完整,就要讓模塊的各個部分做到不可分割和無需添加,按照古人的說法,就是增一分則太多,減一分則太少。這個要求雖然看起來很好理解,其實并沒有什么標準答案,每個人心里都有自己的回答,正所謂仁者見仁,智者見智。其次是單一化和小型化,一般來說,范圍太大的東西會造成人腦覆蓋不全,比如一個功能,如果牽扯的部分過多,就會造成從底層到中間層,再到上層,全部都要思考到,估計沒有幾個人能做到,即使做到了,將來的維護和修改也會變成噩夢。相反,只要功能的涉及面夠窄,就很容易進行思考和修改,這個道理應該沒有什么問題。

  既然要保證模塊單一、小型化和保證完整,也就意味著這個模塊可以認為是一個完整而單獨的程序,無需外圍程序的支持就可以單獨運行和測試。從而引出我的最重要的觀點:盡量用多進程來分拆程序。在Windows的世界里,多進程似乎是天生被忽略和鄙視的,從unix的觀點看,其主要原因是Windows的設計中對進程的快速創建支持不夠,造成對多進程的天然排斥和害怕。但是換一個思路看,多進程也許是目前最好的架構方式。底層的功能分拆成各個進程單獨運行,通過ipc和上層的GUI進行交互,膠合層薄了,移植性增強了,調試容易了,功能演進也不再成為噩夢。需求永遠是漸變的,所以進程的漸變也就成為可控的行為。

?  多進程間的傳遞方式一般有這么幾種:共享內存,管道(pipe),信號,消息, socket。其中共享內存適宜于大量數據的即時傳遞,速度快,容量大。但使用共享內存時需要仔細考慮讀寫沖突問題,一般的解決辦法是用全局鎖,但是鎖的存在必然會造成效率的下降,所以能不用鎖就盡量不要用。pipe的速度和容量都沒有共享內存好,但是用來傳遞命令和返回值還是很適合的。信號和消息的方式一般會和操作系統聯系緊密,個人不太喜歡。最后是socket,對于異地交互而言,socket是目前很常用的手段,甚至本地進程間通訊也可以使用。但是由于和網絡有關,所以同步性不好保證,需要辯證的使用。

  說了這么多,舉個例子說明一下。假設現在要做一套點菜軟件供酒店使用,其基本功能包括人員管理,桌臺管理,點菜管理,結賬以及后臺管理五個功能模塊。按照單進程的方式就是將所有功能整合在一起,系統啟動時加載所有的功能,一旦某個模塊出現問題,則必須重新啟動程序,而且各個模塊之間很容易發生資源沖突和請求沖突。如果換成多進程方式,讓我們看看有什么不同。首先是所有的功能最終目的地都是數據庫,那么可以開發一個后臺進程專門所有負責針對數據庫的請求,通過pipe或者共享內存來接收命令和返回結果,那么程序或者說具體代碼塊之間的接口就是單一的pipe或共享內存了。同時,即使某一個程序運行錯誤也不會造成整體失敗,只需要重起失敗的部分即可。當然了,這種方式下存在一個問題,就是效率的降低,但是對于大多數的應用來說,穩定性的提高遠比效率的降低要重要,而且隨著硬件水平的不斷提高,效率總是可以達標的。

  數據庫處理分拆出去后,剩下的就很好處理了,人員、點菜、桌臺等管理模塊都作為單獨的后臺程序出現,最后GUI部分只需要和各個共享內存和pipe打交道即可,無需只要具體的邏輯處理和功能實現,而且各個后臺程序還可以復用,比如人員管理可以挪到客房服務系統中,甚至是其他系統。GUI隨時可以替換,實現了功能和界面的分離,同時系統崩潰的幾率大大降低,升級和售后也方便很多,永遠不要把最終用戶想的太愚蠢,很多時候人們還是蠻有求知欲的。

  更多的細節需要自己整理,這里只是給出了一個框架,起碼我現在的項目已經開始這樣做,效果嘛,半年后就知道了。?

2006-04-05 21:38?

修改于2006-04-07 18:56

再次修改于2006-04-13 21:55

posted on 2006-04-14 01:10 cyantree 閱讀(3331) 評論(12)  編輯 收藏 引用

評論

# re: 多進程的構架方法  回復  更多評論   

好文章,頂了,
我也去找本unix編程藝術看看,這本書被評價得非常高.
2006-04-14 09:39 | Stone Jiang

# re: 多進程的構架方法  回復  更多評論   

嗯,樓主的點菜系統的架構貌似多層滴胖客戶端應用。其實很多java的項目里面都是這樣的,應用服務器負責鏈接到數據庫,ejb完成業務,struts 來控制邏輯,jsp來展現。
2006-04-14 14:42 | ZiDing

# re: 多進程的構架方法  回復  更多評論   

對于windows程序,我覺得還是多線程比較好,而不是多進程?
2006-04-14 23:31 | flyingxu

# re: 多進程的構架方法  回復  更多評論   

感覺是不錯,不過有問題調試的時候可能會麻煩點
2006-04-15 08:57 | 我是阿牛

# re: 多進程的構架方法  回復  更多評論   

關于線程,請看unix編程藝術中的一段話:
“線程成為滋生bug溫床源于它們太容易知道過多彼此的內部狀態。與有著獨立地址空間、必須通過明確IPC進行通訊的進程不同,線程沒有自動封裝。這樣,基于線程的程序不僅產生普通的競爭問題,而且產生了新一類bug:時序依賴,要重現這些問題極其困難,遑論修復。”
起碼在我之前進行的項目中,線程在后期造成的問題遠多過其帶來的好處

關于調試,你認為是調試一個小的單進程容易,還是調試一個復合的大程序容易?
2006-04-15 12:12 | cyantree

# re: 多進程的構架方法  回復  更多評論   

這不典型的COM+
2006-04-16 17:40 | wy_rover

# re: 多進程的構架方法  回復  更多評論   

If you're in uncomfortable position and have got no money to get out from that, you would need to receive the credit loans. Just because it will help you definitely. I take financial loan every time I need and feel OK just because of that.
2010-05-05 20:44 | loans

# re: 多進程的構架方法  回復  更多評論   

Yeah indeed very
helpful for the elocutionists it was pleasant to read about this good post! If you need to get a great job firstofall you need
<a href="http://www.prime-resume.com">resume writers</a>. Study and don't forget - if you have to work and study at the same time, there areold pros who are ready to aid you with your resume when you under time compression and looking for a great job.
2010-08-02 15:01 | Guthrie24Lori

# re: 多進程的構架方法  回復  更多評論   

You feel yourself irritated because of your PR? You should not feel so, because company to buy link and optimization issues can rescue your internet business very fast. No crisis will impact on your internet business!
2011-12-12 16:14 | buy links

# re: 多進程的構架方法  回復  更多評論   

Tutors have got really negative outlook about plagiarizing. So, be extra careful when buy cheap term papers, just because you don't want to be accused in plagiarism.
2012-05-28 22:31 | writing custom papers
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品久久久久| 久久久久久久999精品视频| 在线看片一区| 一本一本久久a久久精品综合麻豆| 亚洲毛片在线看| 亚洲欧美日韩系列| 蘑菇福利视频一区播放| 亚洲另类自拍| 欧美一区二区成人6969| 欧美华人在线视频| 国产精品区二区三区日本| 在线播放精品| 午夜在线成人av| 亚洲国产日韩在线一区模特| 国产日韩一区二区三区| 亚洲成人自拍视频| 亚洲国产视频一区| 国产精品久久网| 日韩视频二区| 亚洲男人第一网站| 欧美日韩国产免费| 亚洲欧洲一区二区三区| 久久精品一区四区| 美女网站在线免费欧美精品| 国内欧美视频一区二区| 西瓜成人精品人成网站| 久久亚洲国产成人| 国产一区二区三区四区在线观看 | 亚洲免费精彩视频| 久久久精品午夜少妇| 国产精品视频一二三| 免费在线成人av| 欧美在线高清| 国产午夜一区二区三区| 亚洲国产视频一区二区| 国产精品日日做人人爱| 国内精品模特av私拍在线观看| 亚洲福利视频一区二区| 久久综合色播五月| 亚洲国产精品久久久久秋霞蜜臀| 久久aⅴ国产欧美74aaa| 亚洲一区国产一区| 国产裸体写真av一区二区| 亚洲欧美在线网| 亚洲深夜福利| 欧美日韩和欧美的一区二区| 久久精品国产亚洲高清剧情介绍| 亚洲综合色丁香婷婷六月图片| 亚洲狠狠丁香婷婷综合久久久| 欧美高清视频一区二区三区在线观看 | 欧美午夜免费| 亚洲剧情一区二区| 久久精品人人爽| 欧美伊人久久| 久久精品中文字幕一区二区三区| 亚洲小说春色综合另类电影| 一区二区三区日韩欧美精品| 国产欧美日韩亚洲一区二区三区| 久久综合伊人77777| 蜜桃精品久久久久久久免费影院| 久久九九精品99国产精品| 国产精品毛片va一区二区三区| 亚洲精品久久久蜜桃| 国产精品国产一区二区| 久久久精品性| 国产日韩一区二区三区在线播放| 亚洲影视中文字幕| 亚洲香蕉视频| 欧美先锋影音| 中文一区字幕| 欧美一级片一区| 国产视频一区欧美| 欧美中文字幕精品| 蜜桃av噜噜一区二区三区| 在线观看91精品国产入口| 久久一区精品| 亚洲第一福利视频| 日韩视频免费看| 欧美亚州韩日在线看免费版国语版| 日韩一区二区免费高清| 午夜伦欧美伦电影理论片| 国产精品一区在线观看你懂的| 性欧美激情精品| 亚洲精品日韩一| 亚洲自拍偷拍网址| 久久久www成人免费无遮挡大片| 今天的高清视频免费播放成人| 99精品国产热久久91蜜凸| 亚洲电影av| 欧美成人免费一级人片100| 欧美一区二区在线| 伊人色综合久久天天五月婷| 欧美激情中文字幕乱码免费| 狼人天天伊人久久| 亚洲黄色影片| 国产精品久久一区二区三区| 欧美专区第一页| 亚洲国产精品成人| 亚洲欧美文学| 亚洲欧洲av一区二区三区久久| 亚洲人成网站在线播| 欧美性生交xxxxx久久久| 欧美在线关看| 亚洲精选视频免费看| 欧美在线日韩在线| 亚洲精品日本| 国产深夜精品| 欧美另类videos死尸| 亚洲大胆美女视频| 国产亚洲成av人片在线观看桃| 理论片一区二区在线| 一本色道久久加勒比88综合| 久久久久久久尹人综合网亚洲| 亚洲精品在线三区| 国产一在线精品一区在线观看| 欧美母乳在线| 老司机免费视频久久| 亚洲欧美在线看| 99av国产精品欲麻豆| 欧美www视频在线观看| 性色av一区二区三区在线观看| 亚洲乱码国产乱码精品精可以看 | 久久久999成人| 亚洲专区在线视频| 艳妇臀荡乳欲伦亚洲一区| 男女精品视频| 久久久欧美一区二区| 国产一区二区在线观看免费| 欧美丝袜一区二区三区| 亚洲欧美日产图| 一区二区冒白浆视频| 亚洲日本国产| 亚洲国产精品女人久久久| 久久久久久午夜| 久久av在线| 欧美在线观看网址综合| 亚洲欧美日韩精品一区二区| 这里只有精品视频在线| 国产精品久久久久久久久免费桃花| 欧美顶级艳妇交换群宴| 麻豆精品网站| 女人香蕉久久**毛片精品| 亚洲伦理网站| 91久久精品美女| 欧美一区二区三区男人的天堂| 亚洲午夜影视影院在线观看| 宅男在线国产精品| 在线午夜精品自拍| 亚洲已满18点击进入久久| 国产午夜精品全部视频播放| 国产精品美腿一区在线看| 国产精品海角社区在线观看| 欧美三日本三级少妇三99 | 亚洲免费在线电影| 欧美一级视频精品观看| 欧美一区二区三区四区在线观看| 午夜精品久久久久久久99热浪潮 | 久久久久99精品国产片| 欧美91视频| 亚洲国产mv| 亚洲理论在线观看| 亚洲一区二区视频| 欧美一区影院| 美女诱惑一区| 欧美精品v国产精品v日韩精品| 欧美日韩三级| 蜜臀久久久99精品久久久久久| 久热精品在线视频| 欧美日韩国产色视频| 欧美69视频| 欧美国产第二页| 久久综合九色综合久99| 日韩视频一区二区三区在线播放| av不卡免费看| 久久国产精品一区二区| 欧美黄色一区| 久久久久久久999精品视频| 美腿丝袜亚洲色图| av成人免费| 久久久午夜视频| 欧美日韩精品免费看| 黑人极品videos精品欧美裸| 欧美视频一区二区三区在线观看 | 午夜在线播放视频欧美| 久久人人97超碰国产公开结果| 欧美精品久久久久久久免费观看 | 欧美视频一区| 亚洲国产精品久久久久婷婷884| 亚洲桃花岛网站| 一本大道久久精品懂色aⅴ| 欧美一区二区在线播放| 亚洲高清毛片| 欧美在线视频观看免费网站| 欧美激情一区在线| 国产一区二区三区久久久| 日韩视频在线观看| 亚洲国产日韩欧美| 亚洲一区二区三区在线| 欧美大片一区二区| 国内久久精品视频|