锘??xml version="1.0" encoding="utf-8" standalone="yes"?> git涓嶅悓浜庣被浼糞VN榪欑鐗堟湰綆$悊緋葷粺錛岃櫧鐒剁啛鎮(zhèn)夊父鐢ㄧ殑鎿嶄綔灝卞彲浠ユ弧瓚沖ぇ閮ㄥ垎闇姹傦紝浣嗕負浜嗗湪閬囧埌楹葷儲鏃朵笉鑷充簬闈犺洰鍔涘幓灝濊瘯錛屼簡瑙it鐨勫師鐞嗚繕鏄緢鏈夊繀瑕併?/p>
閫氳繃git綆$悊鐨勬枃浠剁増鏈俊鎭叏閮ㄥ瓨鏀懼湪鏍圭洰褰?code>.git涓嬶紝紼嶅井鐪嬩笅錛?/p>
git闄や簡鎻愪緵緇欐垜浠鉤鏃跺父鐢ㄧ殑涓浜涘懡浠や箣澶栵紝榪樻湁寰堝搴曞眰鍛戒護錛屽彲浠ョ敤浜庢煡鐪嬩互涓婇儴鍒嗘枃浠惰〃紺虹殑涓滆タ銆?/p>
鐞嗚Вgit閲岀殑涓変釜鍖哄煙姒傚康闈炲父閲嶈銆俫it閲屽緢澶氬父鐢ㄧ殑鍛戒護閮芥槸鍥寸粫鐫榪欎笁涓尯鍩熸潵鍋氱殑銆傚畠浠垎鍒負錛?/p>
git涓繕鏈変笁綾誨父鐢ㄥ璞★紙瀹為檯涓嶆涓夌錛夛紝鐞嗚В榪欎笁綾誨璞′篃寰堥噸瑕併傚垎鍒負錛?/p>
鎵鏈夊璞¢兘浼氫互鏂囦歡鐨勫艦寮忎繚瀛樺湪 鎺ヤ笅鏉ユ妸涓婇潰鎵鏈夌殑鍐呭鍏寵仈璧鋒潵銆傚仛浠ヤ笅鎿嶄綔錛?/p>
涓婇潰鐨勬搷浣滃睍紺轟簡git涓笁涓尯鍩熶笁涓璞$殑閮ㄥ垎鍏寵仈鍏崇郴銆俫it涓瘡涓璞¢兘浠ヤ竴涓?0涓瓧絎﹂暱搴︾殑SHA-1鍝堝笇鍊間負鏍囪瘑錛屼互榪?0涓瓧絎︾殑鍓?涓瓧絎︿綔涓烘枃浠跺す錛屼互鍚?8涓瓧絎︿負鏂囦歡鍚嶃?/p>
鍩轟簬浠ヤ笂緇х畫鎿嶄綔錛?/p>
鍖哄煙鍜屽璞″浣曚氦浜掔殑鍙互鐢ㄤ笅鍥炬弿榪幫細 閫氳繃 鍗充嬌鏄凡緇忚鐗堟湰綆$悊鐨勬枃浠訛紝鍙戠敓鏀瑰姩鍚庯紙姝e父鏀瑰姩鎴栧悎騫訛級閮戒嬌鐢?code>git add鏉ラ噸鏂癿ark瀹冦傚垱寤虹浜屾鎻愪氦榪涗竴姝ヨ璇嗭細 浠ヤ笂錛屽彂鐜頒竴涓湁瓚g殑鐜拌薄錛氭柊鍔犵殑 闇瑕佹敞鎰忥紝鏈夋椂鍊欐垜浠嬌鐢?code>git commit -a錛屽畠浼氱洿鎺ュ皢宸茬粡鍔犲叆鐗堟湰綆$悊鐨勬枃浠朵竴璧鋒彁浜わ紝浠庤岃煩榪囦簡 浠庝笂闈㈢殑鍐呭鍏跺疄宸茬粡鍙互鐪嬪嚭git鐨勪紭鍔挎墍鍦紝瀹冨彲浠ュ畬鍏ㄤ笉闇瑕佹湇鍔″櫒灝卞畬鎴愪竴涓増鏈帶鍒剁郴緇熺殑鎵鏈変簨鎯呫傚湪.git鏂囦歡涓畠璁板綍浜嗘墍鏈夌殑鏂囦歡鐨勬墍鏈夊巻鍙叉彁浜わ紝璁板綍浜嗘瘡涓嬈℃彁浜ょ殑淇℃伅銆?/p>
git鐨勫父鐢ㄦ搷浣滀腑榪樹細娑夊強鍒板垎鏀佽繙绔粨搴撶瓑錛岀┖浜嗗啀鍐欍?/p>
鍥犱負涔嬪墠涓鐩村鍦ㄦ父鎴忓紑鍙戣涓氾紝鐢變簬縐嶇鍘熷洜涓鐩村杞歡宸ョ▼涓殑欏圭洰綆$悊銆侀」鐩紑鍙戞柟娉曠己涔忎綋楠屻傝櫧鐒墮」鐩腑涔熸浘鍊″緙栧啓鏇村鐨勬枃妗o紝鏃犺鏄ā鍧楄鏄庢枃妗h繕鏄璁℃枃妗o紝浣嗘晥鏋滀竴鐩翠笉濂姐備笉鐢氱悊鎯崇殑鍦版柟涓昏浣撶幇鍦ㄦ枃妗g殑瑙勮寖鎬ф瑺緙恒佷笉緇熶竴銆佹誕浜庤〃闈㈡病鏈夊疄璐ㄥ唴瀹廣傛枃妗g殑緙栧啓緙轟箯璇﹀敖鐨勬柟娉曟寚瀵鹼紝閭d箞鎵璋撶殑璁捐鏂囨。瑕佷箞鏄敤鏉ユ暦琛嶄笂綰ц涔堝氨鏄殢鐫寮鍙戜漢鍛樼殑姘村鉤涓嶄竴鑰屽崈宸竾鍒?/p> 褰撴垜寮濮嬬洰鍓嶈繖涓潪娓告垙欏圭洰鏃訛紝鎴戜篃鏇炬兂錛屽墠鏈熷仛濂界粨鏋勮璁★紝鍒跺畾濂藉叧閿棶棰樼殑瑙e喅鏂規(guī)錛岄偅涔堣瀹屾垚榪欎釜欏圭洰灝變笉鍦ㄨ瘽涓嬩簡銆備絾鏄垜寰堝揩灝遍潰涓翠簡涓涓棶棰橈細闇姹備笉瀹氥傚洖鎯寵韓澶勬父鎴忓叕鍙哥殑閭d簺鏃ュ瓙錛岀▼搴忓憳鎬繪槸鎶辨ㄧ瓥鍒掗渶姹傚彉鏇磋繃蹇繃澶氾紝鍦ㄦ瘡涓嬈$瓥鍒掓彁鍑轟竴涓渶姹傚彉鏇存椂錛岃皚鎱庣殑紼嬪簭鍛橀兘浼氬啀涓夎絳栧垝淇濊瘉錛氭斁蹇冿紝涓嶄細鍙樹簡銆傝屾垜闈復鐨勯棶棰樺垯鏇翠負涓ュ郴銆傛垜鎰忚瘑鍒幫紝欏圭洰鐨勯渶姹傦紝灝辮繛鐢ㄦ埛涔熸棤娉曚竴涓緗楀垪鍑烘潵銆傛垜浠渶瑕佺殑鏄渶姹傝皟鐮斻備絾灝辯畻浣犲皢瀹㈡埛鐨勬墍鏈夐渶姹傚叏閮ㄦ寲鎺樺嚭鏉ュ悗錛堣繖鍑犱箮涓嶅彲鑳斤紝鍥犱負浠栦滑鑷繁涔熶笉澶竻妤氳嚜宸辨兂瑕佷粈涔堬級錛屽綋浣犱氦浠樹簡絎竴涓蔣浠剁増鏈紝鍑犱箮鍙互鑲畾瀹㈡埛浼氭彁鍑轟竴澶у爢鐨勯渶姹傚彉鏇達細鎴戣鐨勪笉鏄繖涓紝鎴戣鐨勯偅涓庝箞娌℃湁錛屽摝錛屾垜褰撳垵浠ヤ負浣犺鐨勬槸鍙︿竴涓剰鎬濄?/p> 褰撶劧錛岄渶姹傝皟鐮旇繖縐嶅伐浣滀笉鏄紼嬪簭鍛樺幓鍋氱殑錛堥偅浼氭洿鎮(zhèn)插墽錛屾棤璁烘槸瀵瑰鎴瘋繕鏄紼嬪簭鍛樿岃█錛屼粬浠兘鏄湪瀵圭墰寮圭惔錛夈備絾闇姹傜殑涓嶇‘瀹氭т篃鎬繪槸瀛樺湪鐨勩?/p> 浜嬪疄涓婏紝闇姹傚彉鍖栨湰韜氨鏄竴涓緢姝e父鐨勭幇璞°傛垜涓鍚戞効鎰忔洿鎮(zhèn)茶鍦板鐞嗚蔣浠跺紑鍙戞柟闈㈢殑闂錛屾墍璋撳皬蹇冧嬌寰椾竾騫磋埞銆傚熀浜庢錛屾垜鍐沖畾鎽嗗ソ蹇冩佸瀛﹁蔣浠跺紑鍙戠殑鏂規(guī)硶瀛︺?/p> 鏈枃綆瑕佹弿榪般佹葷粨浜哛UP寮鍙戞柟娉曞鐨勪富瑕佸唴瀹癸紝緇撳悎鎴戣嚜宸辯殑鎰熷彈闃愯堪浜嗕竴浜汻UP鐨勬牳蹇冨師鍒欍傛垜鐩鎬俊鎴戞墍鐞嗚В鐨勫唴瀹規(guī)槸鑲ゆ祬鐨勶紝瀵逛簬闈炰唬鐮佺殑琛ㄨ揪鎴戞洿鐩鎬俊鍏舵槸瀛樺湪姝т箟鐨勩傛墍浠ユ湰鏂囦粎褰撴槸涓縐嶇粡楠屽弬鑰冿紝涓嶅繀褰撶湡銆?/p> RUP鎹紶鏄敤浜庢寚瀵煎ぇ鍨嬬敋鑷寵秴澶у瀷欏圭洰寮鍙戠殑錛屾垜浠仛鐨勪笉鏄繖鏍瘋妯$殑欏圭洰銆備絾鏄垜浠渶瑕佽褰曚笅鏁翠釜欏圭洰鐨勫紑鍙戣繃紼嬶紝閫氳繃榪欎釜榪囩▼涓駭鍑虹殑宸ヤ歡浠諱綍涓涓漢鍙互鐪嬪嚭榪欎釜欏圭洰鏄浣曞疄鐜板嚭鏉ョ殑錛屽叾鐩殑鍦ㄤ簬瑙勯伩鍞湁浠庢搗閲忎唬鐮佷腑鎵嶈兘鐔熸?zhèn)墮骞鐩疄鐜皹q欑闂銆傝繖閲屽嚭鐜頒簡涓涓蹇碉細宸ヤ歡錛屽叾鎸囩殑鏄蔣浠墮」鐩紑鍙戣繃紼嬩腑浠諱綍鐣欎笅璁板綍鐨勪簨鐗╋紝渚嬪鏂囨。銆佸浘銆佷唬鐮佺瓑銆?strong>RUP鐨勪竴涓噸瑕佹濇兂錛屽湪浜庡叾鏁翠釜杞歡寮鍙戣繃紼嬮兘鏄彲鎺ㄥ鐨?/strong>銆備緥濡傛垜浠氬父璇寸殑杞歡鏋舵瀯錛屾垨灝忎竴鐐圭殑妯″潡緇撴瀯錛岄兘鏄氳繃寮鍙戣繃紼嬩腑鍓嶉潰闃舵浜у嚭鐨勫伐浠舵帹瀵煎緱鍑猴紝鑰?strong>涓嶆槸鍑熺▼搴忓憳鐨勭粡楠屾媿鑴戣鎯沖嚭鏉ョ殑錛堢粡楠屼笉澶彲闈狅紝騫朵笖鍗冨樊涓囧埆錛岃?strong>鎺ㄥ鎰忓懗鐫灝嗘瘡涓幆鑺傚彉寰楀彲闈狅級銆傛垜浠熷姪RUP鐨勮繖涓壒鎬э紝鍒涘緩榪欎簺宸ヤ歡錛岀敤浠ュ緩绔嬭搗杞歡瀹炵幇鐨勫彲闈犵煡璇嗗簱銆?/p> 浠ヤ笅鍧囨憳鑷?lt;Thinking in UML>涓RUP鐨勬弿榪幫細 緇熶竴榪囩▼褰掔撼鍜岄泦鎴愪簡杞歡寮鍙戞椿鍔ㄤ腑鐨勬渶浣?jīng)_疄璺碉紝瀹冨畾涔変簡杞歡寮鍙戣繃紼嬩腑鏈閲嶈鐨勯樁孌靛拰宸ヤ綔錛堝洓涓樁孌靛拰涔?jié)涓牳蹇冨伐浣湅箒锛夊Q屽畾涔変簡鍙備笌杞歡寮鍙戣繃紼嬬殑鍚勭瑙掕壊鍜屼粬浠殑鑱岃矗錛岃繕瀹氫箟浜嗚蔣浠剁敓浜ц繃紼嬩腑浜х敓鐨勫伐浠訛紝騫舵彁渚涗簡妯℃澘銆傛渶鍚庯紝閲囩敤婕旇繘寮忚蔣浠剁敓鍛藉懆鏈燂紙榪唬錛夊皢宸ヤ綔銆佽鑹插拰宸ヤ歡涓插湪涓璧鳳紝褰㈡垚浜嗙粺涓榪囩▼銆?/p> 緇熶竴榪囩▼鏄竴縐嶈拷姹傜ǔ瀹氱殑杞歡鏂規(guī)硶錛屽畠榪芥眰寮鍙戠ǔ瀹氭灦鏋勶紝鎺у埗鍙樻洿 緇熶竴榪囩▼闆嗘垚浜嗛潰鍚戝璞℃柟娉曘乁ML璇█銆佹牳蹇冨伐浣滄祦銆佸伐浠舵ā鏉垮拰榪囩▼鎸囧絳夌煡璇?/p> 綆鍗曟潵璇達紝RUP浣滀負涓縐嶈蔣浠墮」鐩紑鍙戞柟娉曞錛?strong>瀹冨畾涔変簡杞歡寮鍙戠殑姣忎竴涓繃紼嬶紝鏈閲嶈鐨勬槸瀹冩寚瀵間簡鍦ㄦ瘡涓涓繃紼嬮渶瑕佷駭鍑轟粈涔堬紝榪欎簺浜у嚭鍙堟槸鎬庢牱寰楀埌銆傚畠璇曞浘瑙勮寖鍖栨暣涓祦紼嬶紝浠ヨ閬塊渶姹傚彉鏇達紝欏圭洰鍙備笌鑰呮按騫充笉涓絳夊甫鏉ョ殑欏圭洰涓嶅彲鎺х瓑闂錛屼互鏈熶竴涓蔣浠朵駭鍝佺ǔ瀹氬湴寮鍙戝嚭鏉?/strong>銆傚湪涓涓」鐩紑鍙戣繃紼嬩腑錛屾渶鏍稿績鐨勮祫婧愭槸浜猴紝鏈涓嶅彲鎺х殑浜︽槸浜恒?/p> 鎴戣寰楄蹇熷涔犱竴縐嶇煡璇嗭紝闇瑕侀鍏堣幏寰楄繖闂ㄧ煡璇嗙殑鎬諱綋妗嗘灦銆傚彟涓鏂歸潰錛屽湪鎴戜滑鑾峰緱鏇村淇℃伅鍚庯紝鎴戜滑闇瑕佹寲鎺樺嚭榪欓棬鐭ヨ瘑鐨勬牳蹇冩濇兂銆傚涔燫UP鎴戣寰椾粠榪欎袱鏂歸潰鍏ユ墜鏄浉瀵規(guī)瘮杈冨揩閫熷拰鏈夋晥鐨勬墜孌點?/p> RUP瀹氫箟浜嗚蔣浠跺紑鍙戣繃紼嬬殑鍥涗釜闃舵錛屼互鍙?涓伐浣滄祦紼?/strong>銆備竴寮犳瀬涓虹粡鍏哥殑RUP寮鍙戣繃紼嬫鏋跺浘濡備笅錛?/p>
RUP灝嗘暣涓蔣浠跺紑鍙戣繃紼嬪垎涓哄洓涓樁孌碉細 姣忎竴涓樁孌電殑宸ヤ綔鍒嗕負9涓祦紼嬶細 鍏朵腑錛屽墠6涓祦紼嬭緇熺О涓?#8221;engineering disciplines”錛屽悗3涓祦紼嬭縐頒負”supporting disciplines”銆傚綋鐒訛紝鎴戜滑涓昏鍏蟲敞鍓?涓祦紼嬨傞偅涔堬紝榪欎簺宸ヤ綔嫻佺▼鍜屽紑鍙戦樁孌靛張鏈変粈涔堝叧緋誨憿錛熶笂鍥句腑鍏跺疄宸茬粡闃愭槑浜嗚繖浜涘叧緋匯?/p> RUP鎸囧榪唬寮鍙戙傚湪杞歡寮鍙戠殑榪?涓樁孌典腑錛屾瘡涓涓樁孌典細琚垎涓鴻嫢騫叉榪唬銆傝屾瘡涓嬈¤凱浠e垯娑電洊浜嗚繖9涓伐浣滄祦紼嬨傞殢鐫寮鍙戦樁孌靛悜浜у搧鍖栭潬榪戯紝鑷劧鑰岀劧鍦幫紝闇姹傜殑鍙樻洿銆佸鍔犺嚜鐒朵細鍑忓皯錛屾墍浠ヤ粠鍥句腑鍙互鐪嬪嚭錛屽紑鍙戣繃紼嬭秺鍒板悗鏈燂紝鍏跺伐浣滄祦紼嬩腑鍏充簬闇姹傜殑宸ヤ綔鍒欒秺灝戙傚悓鏍鳳紝鍦ㄥ厛鍚樁孌碉紝鍏墮渶姹傜浉鍏崇殑宸ヤ綔鍒欏崰鎹簡璇ラ樁孌電殑涓昏宸ヤ綔鍐呭銆?/p>
RUP涓殑榪唬瑕佹眰鍦ㄦ瘡涓嬈¤凱浠d腑錛岄兘浼氬畬鏁村湴瀹炴柦涓閬嶆暣涓伐浣滄祦紼嬨傚湪杞歡瀹炴柦闃舵錛岀敋鑷充細鍦ㄦ瘡涓涓凱浠h繃紼嬪畬鍚庤緭鍑轟竴涓彲榪愯鐨勮蔣浠剁増鏈傝繖涓増鏈彲鑳戒細琚氦浠樼粰瀹㈡埛錛屼互鏈熻繘涓姝ュ湴鍦ㄥ姛鑳介渶姹備笂鍙栧緱涓庡鎴蜂竴鑷寸殑鎰忚銆傝繖鍊掓槸鍚屾晱鎹峰紑鍙戞湁鐐圭被浼箋?/p> 鏃㈢劧鍒跺畾浜嗗伐浣滄祦紼嬶紝閭f瘡涓涓伐浣滄祦紼嬭濡備綍鍘誨疄鏂藉憿錛?strong>RUP鍒跺畾浜嗘瘡涓伐浣滄祦紼嬮渶瑕佸弬涓庣殑瑙掕壊錛岃繖浜涜鑹查渶瑕佷粠浜嬬殑媧誨姩錛屼互鍙婅繖浜涙椿鍔ㄤ駭鐢熺殑宸ヤ歡銆?/strong> 榪欏彞璇濆疄闄呬笂鍙嶆槧浜哛UP鐨勪竴涓噸瑕佷俊鎭紝鎽樿嚜wiki錛?/p> RUP is based on a set of building blocks, or content elements, describing what is to be produced, the necessary skills required and the step-by-step explanation describing how specific development goals are to be achieved. The main building blocks, or content elements, are the following: 鍦ㄦ垜鐪嬫潵錛孯UP姣忎釜宸ヤ綔嫻佺▼鎵瀹屾垚鐨勫伐浣滐紝灝辨槸涓涓緩妯$殑榪囩▼銆傛墍璋撳緩妯★紝綆鍗曟潵璇村氨鏄皢闇瑕佹弿榪扮殑浜嬬墿閫氳繃鏇寸郴緇熺殑褰㈠紡琛ㄨ揪鍑烘潵錛屼互鏈熻幏寰楀璇ヤ簨鐗╂洿娣卞叆鐨勭悊瑙c?lt;Thinking in UML>涓畾涔夊緩妯℃蹇典負錛?/p>
寤烘ā(modeling)錛屾槸鎸囬氳繃瀵瑰瑙備簨鐗╁緩绔嬩竴縐嶆娊璞$殑鏂規(guī)硶鐢ㄤ互琛ㄥ緛浜嬬墿騫惰幏寰楀浜嬬墿鏈韓鐨勭悊瑙o紝鍚屾椂鎶婅繖縐嶇悊瑙f蹇靛寲錛屽皢榪欎簺閫昏緫姒傚康緇勭粐璧鋒潵錛屾瀯鎴愪竴縐嶅鎵瑙傚療鐨勫璞$殑鍐呴儴緇撴瀯鍜屽伐浣滃師鐞嗙殑渚夸簬鐞嗚В鐨勮〃杈俱?/p> 鍦ㄨ繖閲岋紝寤烘ā鐨勮繃紼嬮渶瑕佷嬌鐢ㄤ竴浜涘伐鍏楓傚湪RUP涓緩妯′嬌鐢║ML鏉ュ畬鎴愩傚湪<Thinking in UML>涓榪頒簡UML鐨勬牳蹇冩ā鍨嬶紝鍖呮嫭錛?/p> 鍙兘鍦ㄥぇ瀹剁殑鏅亶璁よ瘑涓紝UML鏃犻潪灝辨槸鍑犵鍥撅紝騫朵笖綺楃湅涓鐪肩悊瑙h搗鏉ヤ篃涓嶅洶闅撅紝鐢氳嚦榪樿兘鐢ㄦ潵鐢葷敾綾誨浘鍋氫笅浠g爜緇撴瀯璁捐銆備絾UML鐨勪綔鐢ㄤ笉浠呬粎濡傛銆?/p> 浠ヤ笂鎵鎻忚堪鐨刄ML鏍稿績妯″瀷涓紝姣忎釜妯″瀷騫朵笉鍗曟寚鐨勭殑鏄竴縐峌ML鍥俱傛瘡涓ā鍨嬪疄闄呬笂閮戒細鍖呭惈鍑犵UML鍥撅紝浼氬寘鍚嫢騫插紶UML鍥俱傝繖浜涙ā鍨嬪熀鏈笂娓楅忎簬RUP鐨?涓伐浣滄祦紼嬩腑錛屽彧涓嶈繃涓嶅悓鐨勫伐浣滄祦紼嬩嬌鐢ㄧ殑妯″瀷姣旈噸涓嶄竴鑰屽凡銆?/p>
渚嬪鍦?#8220;鍒嗘瀽璁捐”宸ヤ綔嫻佺▼涓紝鍙兘浼氫嬌鐢ㄥ埌緋葷粺鐢ㄤ緥妯″瀷銆佸垎鏋愭ā鍨嬨佽蔣浠舵灦鏋勫拰妗嗘灦銆佽璁℃ā鍨嬬瓑錛岃屼笟鍔$敤渚嬫ā鍨嬪彲鑳藉湪榪欎釜嫻佺▼涓牴鏈笉浼氱敤鍒幫紱鐩稿弽錛屼笟鍔$敤渚嬫ā鍨嬪垯鍙兘鍦?#8220;涓氬姟寤烘ā”嫻佺▼涓騫挎硾浣跨敤銆?/p> 鍓嶅凡榪板強鍦≧UP鐨勬瘡涓伐浣滄祦紼嬩腑錛孯UP瀹氫箟浜嗚嫻佺▼闇瑕佸弬涓庣殑瑙掕壊錛屼互鍙婅繖浜涜鑹查渶瑕佽繘琛岀殑媧誨姩錛屼緥濡傝繖閲屽彲浠ョ湅鐪?#8220;鍒嗘瀽璁捐”嫻佺▼涓殑瑙掕壊鍜屾椿鍔ㄩ泦錛堟憳鑷?lt;Thinking in UML>錛夛細 鐩稿簲鐨勶紝鍦ㄨ宸ヤ綔嫻佺▼涓渶瑕佷駭鍑虹殑宸ヤ歡闆嗕負錛堟憳鑷?lt;Thinking in UML>錛夛細 鏃㈢劧浣跨敤浜哢ML浣滀負寤烘ā宸ュ叿錛屾墍浠ュ彲浠ョ畝鍗曞湴璇磋繖浜涘伐浠朵富瑕佸氨鏄疷ML鍥撅紝褰撶劧涔熶細鏈夊叾浠栨枃妗fц川鐨勪簨鐗╋紝渚嬪緗戠粶鍗忚緇撴瀯銆佹暟鎹簱琛ㄧ瓑UML鏃犳硶鎻忚堪鐨勪笢瑗垮垯閫氳繃鏅氭枃瀛楁ф枃妗f弿榪般?/p>
鍒扮洰鍓嶄負姝㈡垜浠凡緇忎簡瑙e埌RUP瀹氫箟浜嗗紑鍙戣繃紼?phase)錛屽畾涔変簡姣忎釜榪囩▼鍖呭惈鐨勮嫢騫插伐浣滄祦紼嬶紝榪樺畾涔変簡姣忎釜宸ヤ綔嫻佺▼闇瑕佸摢浜涜鑹蹭粠浜嬪摢浜涙椿鍔ㄦ潵瀹屾垚鍝簺宸ヤ歡銆傞櫎姝や箣澶栵紝RUP榪樻彁渚涗簡6鏉℃渶浣?jīng)_疄璺電敤浠ユ寚瀵艱蔣浠跺紑鍙戯細 榪欎簺瀹炶返鍦ㄦ垜鐪嬫潵浠呬粎鏄竴浜涢」鐩紑鍙戠殑鎸囧鍘熷垯錛屽畠浠笚閫忓埌姣忎竴涓繃紼嬶紝姣忎竴涓伐浣滄祦紼嬨傚湪欏圭洰榪囩▼涓疄璺佃繖浜涘師鍒欙紝鐢ㄤ互紜繚欏圭洰鐨勬垚鍔熴備緥濡傛垜浠嬌鐢║ML寤烘ā錛屼互杈懼埌“鍙寤烘ā”銆傛垜浠氳繃寤虹珛闇姹傜敤渚嬶紝浠?#8220;綆$悊闇姹?#8221;銆?/p> 浼間箮娌℃湁鏂囨。鏉ヤ笓闂ㄩ槓榪癛UP鐨勬牳蹇冩濇兂錛屼絾鎴戣寰楁帉鎻″叾鏍稿績鎬濇兂鎵嶆槸瀛︿範鐨勮鐐規(guī)墍鍦ㄣ傝鐞嗚В涓縐嶈蔣浠跺紑鍙戞柟娉曞鐨勬牳蹇冩濇兂錛屽叾瀹炴渶濂芥槸灝嗗叾涓庡埆鐨勬柟娉曞鍋氭瘮杈冦傝繖閲屽厛灝辨垜鐨勪竴浜涙劅鎯沖仛闃愯堪銆?/p> 鐢ㄤ緥椹卞姩鎸囩殑鏄暣涓蔣浠墮」鐩殑鎺ㄨ繘榪囩▼錛屾槸渚濋潬“鐢ㄤ緥”鏉ュ畬鎴愩?lt;Thinking in UML>錛?/p> 鍦ㄥ疄闄呯殑杞歡欏圭洰涓紝涓涓蔣浠惰瀹炵幇鐨勫姛鑳介氳繃鐢ㄤ緥鏉ユ崟鑾鳳紝鎺ヤ笅鏉ョ殑鎵鏈夊垎鏋愩佽璁°佸疄鐜般佹祴璇曢兘鐢辯敤渚嬫潵鍙栧緱錛屽嵆浠ュ疄鐜扮敤渚嬩負鐩爣銆傚湪緇熶竴榪囩▼涓敤渚嬭兘澶熼┍鍔ㄧ殑涓嶄粎浠呮槸鍒嗘瀽璁捐銆?/p> 鐢ㄤ緥綆鍗曟潵璇村氨鏄弿榪頒簡涓涓郴緇熷姛鑳姐備絾蹇呴』娉ㄦ剰鐨勬槸錛岃繖浠呬粎鏄畠瀹氫箟鐨勪竴灝忛儴鍒嗐傜敤渚嬩富瑕佸垎甯冨湪“涓氬姟寤烘ā”銆?#8220;闇姹?#8221;銆?#8220;鍒嗘瀽璁捐”榪欎簺宸ヤ綔榪囩▼涓傚湪涓嶅悓鐨勮繃紼嬩腑鐢ㄤ緥鐨勭矑搴﹀拰鎬ц川閮戒笉涓鏍楓備緥濡傚浜庝竴涓熶功緋葷粺鑰岃█錛屽湪涓氬姟寤烘ā闃舵錛屾垜浠彲浠ヨ幏鍙栧嚭涓涓?#8220;鍊熶功”鐢ㄤ緥錛屽叾緋葷粺杈圭晫鐢氳嚦涓嶆槸緋葷粺鑰屽彲鑳戒粎鍏蟲敞榪欎釜涓氬姟鏈韓錛堝洜涓鴻繖涓樁孌佃繕娌℃湁鑰冭檻鍒拌綆楁満濡備綍瀹炵幇榪欎釜鍊熶功涓氬姟錛夛紱鍦ㄧ郴緇熷垎鏋愰樁孌碉紝鎴戜滑灝卞彲浠ュ皢“鍊熶功”榪欎釜鐢ㄤ緥緇嗗寲涓虹敤鎴峰拰璁$畻鏈鴻蔣浠剁郴緇熺殑浜や簰錛涜繘涓姝ュ湴錛屾垜浠彲鑳戒細榪涗竴姝ョ簿鍖栬繖涓敤渚嬶紝渚嬪鐢ㄦ埛閫氳繃緗戦〉緇堢“鍊熶功”銆傦紙榪欓噷鎻忚堪浜嗗緢澶氬緩妯$殑緇嗚妭錛屽彲涓嶅繀娣辯┒錛屾湰鏂囧彧緇欏嚭涓涓瑕佹х殑浠嬬粛錛?/p> 鎴戜滑璇寸敤渚嬮┍鍔ㄨ蔣浠跺紑鍙戯紝浣嗗畠濡備綍椹卞姩鐨勫憿錛熸垜鍦ㄥ疄闄呯殑寤烘ā榪囩▼涓紝鏈鏄庢樉鐨勬劅鍙楀氨鏄敤渚嬮┍鍔ㄤ簡鏁翠釜寤烘ā榪囩▼銆?/p> 榪涘叆璁捐闃舵鍚庯紝铏界劧鍙互榪涗竴姝ュ緩妯★紝寰楀埌浼氱洿鎺ユ槧灝勫埌浠g爜鐨勭被鍥俱佸簭鍒楀浘絳夛紝浣嗚繖鏍風殑鍥懼湪闈復闇姹傚彉鏇存椂錛屽熀鏈笂浼氶潰涓翠慨鏀癸紝榪欐剰鍛崇潃緇存姢榪欎簺鏂囨。闇瑕佽楄垂綺懼姏銆傛墍浠ワ紝<Thinking in UML>涓富寮犲皢綺懼姏鏀懼湪緇存姢鍒嗘瀽綾繪ā鍨嬩腑錛岃岄氳繃鍏朵粬綰﹀畾瀹炵幇浠庡垎鏋愮被鍒板疄闄呬唬鐮佺殑杞崲銆傛垜瑙夊緱榪欎釜涔熷湪鐞嗐?/p> 鎴戜釜浜鴻寰桼UP鐨勪竴澶х壒鐐瑰湪浜庤鑼冨寲浜嗘暣涓蔣浠跺紑鍙戣繃紼嬶紝姣忎竴涓楠ら渶瑕佸摢浜涜鑹插弬涓庯紝璇ュ共浠涔堬紝鎬庝箞鍘誨共閮芥湁鎸囧銆傚姞涔嬭繖浜涙椿鍔ㄧ殑”鍙帹瀵兼?#8220;錛岃繖鎰忓懗鐫涓嶈鍙備笌瑙掕壊灞炰簬浠涔堟按騫籌紝閮藉彲浠ョǔ鍥哄湴鎺ㄨ繘欏圭洰榪涚▼銆?/p>
姝ゅ錛岃繖縐嶈鑼冨寲涔熶細緇欓」鐩暀涓嬭緇嗙殑婕斿寲榪囩▼銆備綘鍙互鏄庣‘鍦扮湅鍒版暣涓蔣浠舵槸濡備綍婕斿寲鍑烘渶緇堢殑浜у搧浠g爜錛屽彲浠ユ繁鍏ュ湴鐞嗚В欏圭洰浠g爜涓殑璁捐銆?/p> 鎴戝彧鏄竴涓猂UP鏂版墜錛屽嵆渚垮姝わ紝鎴戜緷鐒朵笉瑙夊緱RUP鏄蔣浠跺紑鍙戠殑涓囪兘鑽傛垜鐩鎬俊浠諱綍杞歡寮鍙戞柟娉曢兘鏄湁灞闄愭х殑銆傛垜浠湪瀹為檯浣跨敤鐨勬椂鍊欎篃鍙槸鍚稿彇鍏剁簿鍗庛備笉鍚岀殑寮鍙戞柟娉曞叾閫傜敤鑼冨洿涔熸槸涓嶄竴鏍風殑銆傛濡傛湁浜哄皢RUP鍜孹P鍋氭瘮杈冩椂璇達紝濡傛灉浣犱嬌鐢≧UP鍘誨紑涓涓潅璐ч摵錛屽湪娌″紑寮犱箣鍓嶄綘灝卞凡緇忕牬浜т簡錛涘悓鏍峰鏋滀綘鐢╔P鍘誨仛椋炴満錛岄鏈烘瘉浜嗗崄鏉ユ涔熻鎵嶈兘鍋氬嚭鏉ワ紙from <Thinking in UML> again錛夈?/p> 鍙傝?a >Why is processing a sorted array faster than an unsorted array? 鐪嬩互涓嬩唬鐮侊細 闂灝卞湪浜庯紝鍘繪帀 榪欒窡澶勭悊榪欎釜鏁扮粍鐨勯昏緫鏈夐潪甯稿ぇ鐨勫叧緋匯傚浠ヤ笂浠g爜鎵紺猴紝榪欎釜寰幆閲屾湁涓潯浠跺垽鏂傛潯浠跺垽鏂緙栬瘧鎴愪簩榪涘埗浠g爜鍚庯紝灝辨槸涓涓煩杞寚浠わ紝綾諱技錛?/p>
鍏蜂綋涓轟粈涔堜細涓嶅悓錛岃繖娑夊強鍒拌綆楁満CPU鎵ц鎸囦護鏃剁殑琛屼負銆?/p>
鎯寵薄鐜板湪鏈変竴鍫嗘寚浠ょ瓑寰匔PU鍘繪墽琛岋紝閭d箞CPU鏄浣曟墽琛岀殑鍛紵鍏蜂綋鐨勭粏鑺傚彲浠ユ壘涓鏈綆楁満緇勬垚鍘熺悊鐨勪功鏉ョ湅銆侰PU鎵ц涓鍫嗘寚浠ゆ椂錛屽茍涓嶆槸鍗曠函鍦頒竴鏉′竴鏉″彇鍑烘潵鎵ц錛岃屾槸鎸夌収涓縐嶆祦姘寸嚎鐨勬柟寮忥紝鍦–PU鐪熸鎵ц涓鏉℃寚浠ゅ墠錛岃繖鏉℃寚浠ゅ氨鍍忓伐鍘傞噷嫻佹按綰跨敓浜х殑浜у搧涓鏍鳳紝宸茬粡琚粡榪囦竴浜涘鐞嗐傜畝鍗曟潵璇達紝涓鏉℃寚浠ゅ彲鑳界粡榪囪繖浜涜繃紼嬶細鍙栨寚(Fetch)銆佽В鐮?Decode)銆佹墽琛?Execute)銆佹斁鍥?Write-back)銆?/p>
鍋囪鐜板湪鏈夋寚浠ゅ簭鍒桝BCDEFG銆傚綋CPU姝e湪鎵ц(execute)鎸囦護A鏃訛紝CPU鐨勫叾浠栧鐞嗗崟鍏冿紙CPU鏄敱鑻ュ共閮ㄤ歡鏋勬垚鐨勶級鍏跺疄宸茬粡棰勫厛澶勭悊鍒頒簡鎸囦護A鍚庨潰鐨勬寚浠わ紝渚嬪B鍙兘宸茬粡琚В鐮侊紝C宸茬粡琚彇鎸囥傝繖灝辨槸嫻佹按綰挎墽琛岋紝榪欏彲浠ヤ繚璇丆PU楂樻晥鍦版墽琛屾寚浠ゃ?/p>
濡備笂鎵璇達紝CPU鍦ㄦ墽琛屼竴鍫嗛『搴忔墽琛岀殑鎸囦護鏃訛紝鍥犱負瀵逛簬鎵ц鎸囦護鐨勯儴浠舵潵璇達紝鍏跺熀鏈笉闇瑕佺瓑寰咃紝鍥犱負璇稿鍙栨寚銆佽В鐮佽繖浜涜繃紼嬫棭灝辮鍋氫簡銆備絾鏄紝褰揅PU闈復闈為『搴忔墽琛岀殑鎸囦護搴忓垪鏃訛紝渚嬪涔嬪墠鎻愬埌鐨勮煩杞寚浠わ紝鎯呭喌浼氭庢牱鍛紵 鍙栨寚銆佽В鐮佽繖浜汣PU鍗曞厓騫朵笉鐭ラ亾紼嬪簭嫻佺▼浼氳煩杞紝鍙湁褰揅PU鎵ц鍒拌煩杞寚浠ゆ湰韜椂錛屾墠鐭ラ亾璇ヤ笉璇ヨ煩杞傛墍浠ワ紝鍙栨寚瑙g爜榪欎簺鍗曞厓?yōu)兗毦lх畫鍙栬煩杞寚浠や箣鍚庣殑鎸囦護銆傚綋CPU鎵ц鍒拌煩杞寚浠ゆ椂錛屽鏋滅湡鐨勫彂鐢熶簡璺寵漿錛岄偅涔堜箣鍓嶇殑棰勫鐞嗭紙鍙栨寚銆佽В鐮侊級灝辯櫧鍋氫簡銆傝繖涓椂鍊欙紝CPU寰椾粠璺寵漿鐩爣澶勪復鏃跺彇鎸囥佽В鐮侊紝鐒跺悗鎵嶅紑濮嬫墽琛岋紝榪欐剰鍛崇潃錛欳PU鍋滀簡鑻ュ共涓椂閽熷懆鏈燂紒 榪欏叾瀹炴槸涓棶棰橈紝濡傛灉CPU鐨勮璁℃斁浠昏繖涓棶棰橈紝閭d箞鍏墮熷害灝卞緢闅炬彁鍗囪搗鏉ャ備負姝わ紝浜轟滑鍙戞槑浜嗕竴縐嶆妧鏈紝縐頒負branch prediction錛屼篃灝辨槸鍒嗘敮棰勬祴銆傚垎鏀嫻嬬殑浣滅敤錛屽氨鏄嫻嬫煇涓煩杞寚浠ゆ槸鍚︿細璺寵漿銆傝孋PU灝辨牴鎹嚜宸辯殑棰勬祴鍒扮洰鏍囧湴鍧鍙栨寚浠ゃ傝繖鏍鳳紝鍗沖彲浠庝竴瀹氱▼搴︽彁楂樿繍琛岄熷害銆傚綋鐒訛紝鍒嗘敮棰勬祴鍦ㄥ疄鐜頒笂鏈夊緢澶氭柟娉曘?/p>
綆鍗曠殑棰勬祴鍙互鐩存帴浣跨敤涔嬪墠鐨勫疄闄呮墽琛岀粨鏋溿備緥濡傛煇涓煩杞寚浠ゆ煇涓嬈′駭鐢熶簡璺寵漿錛岄偅涔堜笅涓嬈℃墽琛岃鎸囦護鏃訛紝CPU灝辯洿鎺ヤ粠璺寵漿鐩爣鍦板潃澶勫彇鎸囷紝鑰屼笉鏄璺寵漿鎸囦護鐨勪笅涓鏉℃寚浠ゃ?/p>
浜嗚В浜嗕互涓婁俊鎭悗錛屾枃绔犲紑澶存彁鍑虹殑闂灝卞彲浠ヨВ閲婁簡銆傝繖涓唬鐮佷腑鏈変竴涓驚鐜紝榪欎釜寰幆閲屾湁涓涓潯浠跺垽鏂傛瘡涓嬈PU鎵ц榪欎釜鏉′歡鍒ゆ柇鏃訛紝CPU閮藉彲鑳借煩杞埌寰幆寮濮嬪鐨勬寚浠わ紝鍗充笉鎵цif鍚庣殑鎸囦護銆備嬌鐢ㄥ垎鏀嫻嬫妧鏈紝褰撳鐞嗗凡緇忔帓搴忕殑鏁扮粍鏃訛紝鍦ㄨ嫢騫叉 鐩稿弽錛屽鏋滄槸鏃犲簭鐨勬暟緇勶紝CPU鐨勫垎鏀嫻嬪湪寰堝ぇ紼嬪害涓婇兘鏃犳硶棰勬祴鎴愬姛錛屽熀鏈氨鏄?0%鐨勯嫻嬫垚鍔熸鐜囷紝榪欏皢娑堣楀ぇ閲忕殑鏃墮棿錛屽洜涓篊PU寰堝鏃墮棿閮戒細絳夊緟鍙栨寚鍗曞厓閲嶆柊鍙栨寚銆?/p>
鏈枃瀹屻傛渶鍚庢劅鍙逛笅stackoverflow涓婅繖涓笘瀛愰噷閭d釜鑰佸鍥炵瓟闂鐨勪笓涓氭э紝鎴戣鏄ゼ涓繪棭灝辨劅鍔ㄥ緱娑曟唱妯浜嗐傛劅璋㈡瘡涓涓紶鎾煡璇嗙殑浜恒?/p>
鏂囦歡
$ ls .git
COMMIT_EDITMSG HEAD branches description index logs packed-refs
FETCH_HEAD ORIG_HEAD config hooks info objects refs
涓変釜鍖哄煙/涓夌被瀵硅薄
.git/objects
鐩綍錛屼竴涓璞′竴涓枃浠躲?/p>
$ mkdir test && cd test
$ git init
$ ls -a .git/objects # 娌℃湁鏂囦歡
. .. info pack
$ touch readme # working directory閲屽鍔犱簡涓涓猺eadme鏂囦歡
$ git add readme # 娣誨姞涓涓枃浠跺埌stage鍖哄煙
$ git ls-files --stage # 榪欎釜鍛戒護鍙互鏌ョ湅stage鍖哄煙閲岀殑鍐呭錛屽彲浠ョ湅鍒版湁readme
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 readme
$ ls -a .git/objects # 鍚屾椂.git/objects澧炲姞浜嗕竴涓猠6鐨勭洰褰?
. .. e6 info pack
$ ls -a .git/objects/e6/ # e6鐩綍涓嬪鍔犱簡涓涓枃浠?
. .. 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
$ git commit -m 'first commit' # commit浼氬皢stage閲屾爣璇嗙殑鏂囦歡鎻愪氦鍒癶istory鍖哄煙
[master (root-commit) 8bf6969] first commit
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme
$ ls -a .git/objects # 澧炲姞浜?涓枃浠訛紝涔熷氨鏄?涓璞?
. .. 8b e6 e8 info pack
$ git ls-files --stage # stage浠呰〃紺哄綋鍓嶈鐗堟湰綆$悊鐨勬枃浠訛紝鎵浠ュ唴瀹逛笉鍙?
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 readme
# git cat-file 鍛戒護鍙互鐢ㄤ簬鏌ョ湅.git/objects涓嬬殑鏂囦歡錛屾剰鍗沖彲鐢ㄤ簬鏌ョ湅瀵硅薄
$ git cat-file -t e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 # 榪欎釜鏄箣鍓峠it add readme浜х敓鐨勬枃浠跺璞?blob
blob
# 鍚屾牱鎴戜滑鏉ユ煡鐪媑it commit -m鍚庢柊澧炵殑涓や釜瀵硅薄
$ ls .git/objects/8b/
f696927c17526eb8f0c6dae8badb968a001ed0
$ git cat-file -t 8bf696927c17526eb8f0c6dae8badb968a001ed0 # 璁板緱甯︿笂8b榪欎釜鏂囦歡澶瑰悕錛屾墠綆椾竴涓畬鏁寸殑瀵硅薄ID銆傝繖鏄竴涓猚ommit瀵硅薄
commit
$ ls .git/objects/e8
0ad49ace82167de62e498622d70377d913c79e
$ git cat-file -t e80ad49ace82167de62e498622d70377d913c79e # tree瀵硅薄
tree
git cat-file -p
鍙互鏌ョ湅瀵硅薄鐨勬洿澶氭弿榪幫紝git cat-file -t
浠呰幏鍙栧璞$殑綾誨瀷銆傚仛浠ヤ笅鎿嶄綔鑾峰緱鏇存繁鐨勮璇嗭細# 榪欎釜commit瀵硅薄璁板綍浜嗘彁浜よ呯殑淇℃伅錛岃繕鍖呮嫭鎸囧悜鐨則ree瀵硅薄
$ git cat-file -p 8bf696927c17526eb8f0c6dae8badb968a001ed0
tree e80ad49ace82167de62e498622d70377d913c79e
author Kevin Lynx <kevinlynx@gmail.com> 1410090424 +0800
committer Kevin Lynx <kevinlynx@gmail.com> 1410090424 +0800
first commit
# 鏌ョ湅tree瀵硅薄鍙互鐪嬪嚭tree鎸囧悜鐨刡lob瀵硅薄
$ git cat-file -p e80ad49ace82167de62e498622d70377d913c79e
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 readme
$ echo 'hello git' > readme
$ touch install
$ git ls-files --stage # 涓嶄嬌鐢╣it add錛屾殏瀛樺尯鍩熷唴瀹規(guī)病鍙?
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 readme
# 姝ゆ椂stage閲屽唴瀹規(guī)湭鍙橈紝鎻愮ずno changes added to commit
$ git commit
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# install
no changes added to commit (use "git add" and/or "git commit -a")
$ git add readme
$ ls .git/objects/ # git add涔嬪悗.git/objects涓嬫柊澧炴枃浠?
8b 8d e6 e8 info pack
$ ls .git/objects/8d/
0e41234f24b6da002d962a26c2495ea16a425f
$ git cat-file -p 8d0e41234f24b6da002d962a26c2495ea16a425f # 鏌ョ湅璇ユ柊澧炲璞?
hello git
# 榪欎釜鏃跺欒繕鍙互鍦ㄦ彁浜ゅ墠鎾ら攢git add readme
$ git reset readme # 浠巋istory鍒皊tage
Unstaged changes after reset:
M readme
$ cat readme
hello git
$ git checkout readme # 浠巗tage鍒皐orking directory
$ cat readme # 娌℃湁鍐呭錛屽洖鍒扮涓涓増鏈?
$ git add install # 娣誨姞鏂板垱寤虹殑鏂囦歡
$ git ls-files --stage # stage涓殑鍐呭鏄渶鏂扮殑readme鍜屾柊娣誨姞鐨刬nstall
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 install
100644 8d0e41234f24b6da002d962a26c2495ea16a425f 0 readme
$ ls .git/objects/
8b 8d e6 e8 info pack
install
鏂囦歡鐨凷HA-1鍝堝笇鍊煎拰涔嬪墠鐨?code>readme鐩稿悓錛岃繖鏄洜涓鴻繖2涓枃浠墮兘鏄┖鐨勶紝鍐呭鐩稿悓銆傜戶緇細$ git commit -m 'second commit'
$ ls .git/objects/ # 鎻愪氦鍚庢柊澧?涓璞?
45 72 8b 8d e6 e8 info pack
$ ls .git/objects/72/
b94e949c5fca6092cc74c751a7bb35ee71c283
$ git cat-file -p 72b94e949c5fca6092cc74c751a7bb35ee71c283
tree 45cf0bd049d7eea4558b14f33a894db27c7c1130 # 鏂板垱寤虹殑tree瀵硅薄
parent 8bf696927c17526eb8f0c6dae8badb968a001ed0 # commit瀵硅薄鏈塸arent錛屾鏄笂涓嬈℃彁浜?
author Kevin Lynx <kevinlynx@gmail.com> 1410094456 +0800
committer Kevin Lynx <kevinlynx@gmail.com> 1410094456 +0800
second commit
# 鏂板垱寤虹殑tree瀵硅薄鎸囧悜浜?涓枃浠?
$ git cat-file -p 45cf0bd049d7eea4558b14f33a894db27c7c1130
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 install
100644 blob 8d0e41234f24b6da002d962a26c2495ea16a425f readme
git add
榪欎釜榪囩▼銆傚悓git寰堝鎿嶄綔涓鏍鳳紝瀹冨彧鏄竴涓揩鎹鋒搷浣溿?/p>
鎬葷粨
鍙傝冩枃妗?/h2>
鍓嶈█
姒傝
RUP姒傝
RUP榪囩▼涓庡疄璺?/h2>
RUP妗嗘灦
RUP寤烘ā
RUP鏈浣?jīng)_疄璺?/h3>
RUP鏍稿績鎬濇兂
鐢ㄤ緥椹卞姩
瑙勮寖鍖栨暣涓繃紼?/h3>
鎬葷粨
鍙傝冩枃妗?/h2>
闂
#include <algorithm>
#include <ctime>
#include <iostream>
int main()
{
// generate data
const unsigned arraySize = 32768;
int data[arraySize];
for (unsigned c = 0; c < arraySize; ++c)
data[c] = std::rand() % 256;
// !!! with this, the next loop runs faster
std::sort(data, data + arraySize);
// test
clock_t start = clock();
long long sum = 0;
for (unsigned i = 0; i < 100000; ++i)
{
// primary loop
for (unsigned c = 0; c < arraySize; ++c)
{
if (data[c] >= 128)
sum += data[c];
}
}
double elapsedTime = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
std::cout << elapsedTime << std::endl;
std::cout << "sum = " << sum << std::endl;
}
std::sort
閭d竴琛岋紝浠ヤ笂浠g爜灝嗚繍琛屾洿闀跨殑鏃墮棿銆傚湪鎴戠殑鏈哄櫒涓婃湭鍘繪帀std::sort
鑰楁椂8.99s錛屽幓鎺夊悗鑰楁椂24.78s銆傜紪璇戝櫒浣跨敤鐨勬槸gcc4.4.3銆備簨瀹炰笂錛屼互涓婁唬鐮佽窡緙栬瘧鍣ㄦ病鏈夊叧緋伙紝鐢氳嚦璺熻璦娌℃湁鍏崇郴銆傞偅榪欐槸涓轟粈涔堝憿錛?/p>
CPU鐨勬祦姘寸嚎鎸囦護鎵ц
Branch Prediction
絳旀
data[c]>=128
閮戒笉鎴愮珛鏃訛紙鎴栫涓嬈′笉鎴愮珛鏃訛紝鍙栧喅浜庡垎鏀嫻嬬殑瀹炵幇錛夛紝CPU棰勬祴榪欎釜鍒嗘敮鏄緇堜細璺寵漿鍒板驚鐜紑濮嬬殑鎸囦護鏃訛紝榪欎釜鏃跺機PU灝嗕繚鎸佹湁鏁堢殑鎵ц錛屼笉闇瑕侀噸鏂扮瓑寰呭埌鏂扮殑鍦板潃鍙栨寚錛涘悓鏍鳳紝褰?code>data[c]>=128鏉′歡鎴愮珛鑻ュ共嬈″悗錛孋PU涔熷彲浠ラ嫻嬭繖涓垎鏀槸涓嶅繀璺寵漿鐨勶紝閭d箞榪欎釜鏃跺機PU涔熷彲浠ヤ繚鎸侀珮鏁堟墽琛屻?/p>
鍙傝冭祫鏂?/h2>