锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久综合免费视频,最新亚洲视频,美女脱光内衣内裤视频久久网站 http://m.shnenglu.com/keigoliye/category/11700.html涓鍒囬兘鏄焊鑰佽檸 zh-cn Wed, 09 Dec 2009 13:29:16 GMT Wed, 09 Dec 2009 13:29:16 GMT 60 erlang緹?009-12-7鏃ュ叧浜庣敤鍏朵粬璇█瀹炵幇erlang妯″紡鐨勮亰澶╄褰?/title> http://m.shnenglu.com/keigoliye/archive/2009/12/07/102764.html鏆楀鏁欑埗 鏆楀鏁欑埗 Mon, 07 Dec 2009 15:49:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/12/07/102764.html http://m.shnenglu.com/keigoliye/comments/102764.html http://m.shnenglu.com/keigoliye/archive/2009/12/07/102764.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/102764.html http://m.shnenglu.com/keigoliye/services/trackbacks/102764.html 鏆楀鏁欑埗錛?浣犺鐨?涓囪繛鎺ワ紝姣忎釜榪炴帴姣忕鍙?K鍖呭悧錛?br> 2009-12-7 22:19:49 鏆楀鏁欑埗(199033) en 2009-12-7 22:19:49 jack(357794482) 灝辨槸鍚庨潰鍑芥暟鎵ц瀹屾垚涔嬪悗鐨勭粨鏋滅粰鍓嶉潰鐨勫師瀛愬悧 2009-12-7 22:20:54 LinkTalk.NET(909327571) 鏈哄櫒閰嶇疆濡備綍錛熻繕鏈?涓囦釜瀹㈡埛绔浣曟ā鎷熺殑錛?br> 2009-12-7 22:21:41 鏆楀鏁欑埗(199033) 鏈哄櫒鏄疉MD 鍙屾牳 3200+ 2009-12-7 22:21:50 LinkTalk.NET(909327571) 鍙﹀灝辨槸姣忎釜榪炴帴涓婄殑鏃墮棿闂撮殧涓?縐掞紝娌℃湁寤惰繜鍚楋紵 2009-12-7 22:22:12 鏆楀鏁欑埗(199033) 鍐呭瓨鏄?G錛屾搷浣滅郴緇焨buntu 9.10 2009-12-7 22:22:53 鏆楀鏁欑埗(199033) 鎴戜漢涓虹殑娌″仛榪欑寤惰繜 2009-12-7 22:23:04 鏆楀鏁欑埗(199033) 鏈嶅姟鍣ㄥ拰瀹㈡埛绔兘鏄繖涓厤緗?br> 2009-12-7 22:23:16 鏆楀鏁欑埗(199033) 瀹㈡埛绔槸鐢╡rlang妯℃嫙騫跺彂 2009-12-7 22:23:39 鏆楀鏁欑埗(199033) 涓嶈繃鍒涘緩6W涓繛鎺ヨ姳璐逛簡涓瀹氱殑鏃墮棿 2009-12-7 22:24:09 鏆楀鏁欑埗(199033) 瀵瑰摝錛岃繖鏍峰氨涓嶆槸6涓囦釜涓璧峰茍鍙戝嚭鏉ョ殑 2009-12-7 22:24:09 LinkTalk.NET(909327571) 澶ф澶氫箙錛?br> 2009-12-7 22:24:19 鏆楀鏁欑埗(199033) 娌$粺璁℃椂闂?br> 2009-12-7 22:24:42 鏆楀鏁欑埗(199033) 榪欓噷瀛樺湪闂浜?br> 2009-12-7 22:25:27 鏆楀鏁欑埗(199033) 鍏跺疄騫跺彂搴旇鏄?榪炴帴鏁?/ 鍒涘緩騫跺彂鐨勬椂闂?br> 2009-12-7 22:25:27 LinkTalk.NET(909327571) 浠涔堥棶棰橈紵 2009-12-7 22:25:49 LinkTalk.NET(909327571) 榪欎釜鏃犳墍璋?br> 2009-12-7 22:26:08 LinkTalk.NET(909327571) 鍙浣犲叏閮ㄨ繛鎺ュ垱寤哄ソ鍚庝竴鐩翠繚鎸佷綇灝卞彲浠ヤ簡 2009-12-7 22:26:23 鏆楀鏁欑埗(199033) 涓鐩翠繚鎸佷篃涓嶆槸6涓囧悓鏃?br> 2009-12-7 22:26:32 鏆楀鏁欑埗(199033) 鍒涘緩榪炴帴鏈夋椂宸?br> 2009-12-7 22:26:35 LinkTalk.NET(909327571) 6涓囦釜濡傛灉鑳藉1k/s鐨勪繚鎸?8灝忔椂鐨勮瘽錛岄潪甯哥墰閫間簡 2009-12-7 22:26:38 鏆楀鏁欑埗(199033) 閭d箞鍙戠敓鏁版嵁涔熸湁鏃跺樊 2009-12-7 22:27:53 LinkTalk.NET(909327571) 浣犻氳繃浠涔堟柟寮忓仛鍒伴棿闅斾竴縐掑彂涓嬈℃暟鎹殑錛?br> 2009-12-7 22:28:32 LinkTalk.NET(909327571) sleep鍚楋紵 2009-12-7 22:29:19 LinkTalk.NET(909327571) 浣犳湁娌℃湁鐪嬩竴涓嬬綉鍗$殑甯﹀娑堣?br> 2009-12-7 22:29:37 LinkTalk.NET(909327571) 鎸夐亾鐞嗗簲璇?k * 6涓?= 60M/s 2009-12-7 22:30:12 LinkTalk.NET(909327571) 濡傛灉杈懼埌60M浠ヤ笂鍩烘湰綆楁槸鐪熸鐨勭ǔ瀹氱殑瀹炵幇浜?涓囧茍鍙?br> 2009-12-7 22:30:34 鏆楀鏁欑埗(199033) client閭h竟鏄垜鍚屼簨鍐欑殑 2009-12-7 22:30:39 鏆楀鏁欑埗(199033) 鎴戜笉鐭ラ亾鏄笉鏄痵leep 2009-12-7 22:30:52 鏆楀鏁欑埗(199033) 甯﹀娑堣楁垜榪樹篃鐪熸病鐪?br> 2009-12-7 22:30:53 LinkTalk.NET(909327571) erlang閲岄潰濂藉儚涔熷氨鍙湁sleep浜?br> 2009-12-7 22:31:06 鏆楀鏁欑埗(199033) 鎴戜及璁′笉鏄?br> 2009-12-7 22:31:52 LinkTalk.NET(909327571) 鍙﹀鎴戞鐤戝綋騫跺彂楂樹簡浠ュ悗錛宻leep浼氫笉鍑嗭紝鐪熸鐨勯棿闅旇偗瀹氫細澶т簬sleep鐨勬椂闂?br> 2009-12-7 22:32:50 鏆楀鏁欑埗(199033) 鎭╋紝紜疄鏈夊緟楠岃瘉 2009-12-7 22:33:04 鏆楀鏁欑埗(199033) 涓嶈繃鍙湁鐢ㄥ簲鐢ㄦ潵楠岃瘉浜?br> 2009-12-7 22:33:14 鏆楀鏁欑埗(199033) 絳夐」鐩笂綰夸簡錛岀湅鐪嬪疄闄呮儏鍐?br> 2009-12-7 22:33:17 LinkTalk.NET(909327571) 鍡紝鍛靛懙 2009-12-7 22:33:24 LinkTalk.NET(909327571) 浣犱滑榪欎釜鐢ㄥ湪浠涔堥」鐩笂椹紵 2009-12-7 22:33:27 LinkTalk.NET(909327571) 涓婇潰 2009-12-7 22:33:30 LinkTalk.NET(909327571) 娓告垙鍚楋紵 2009-12-7 22:33:31 鏆楀鏁欑埗(199033) 鎭╋紝娓告垙鐨?br> 2009-12-7 22:34:48 LinkTalk.NET(909327571) [琛ㄦ儏] 2009-12-7 22:34:59 鏆楀鏁欑埗(199033) 涓嶈繃椋庨櫓涔熷緢澶?br> 2009-12-7 22:35:15 LinkTalk.NET(909327571) 涓轟粈涔堬紵 2009-12-7 22:35:24 鏆楀鏁欑埗(199033) 娌″仛榪?br> 2009-12-7 22:35:28 鏆楀鏁欑埗(199033) 娌℃湁鎴愮啛欏圭洰鐨勭粡楠?br> 2009-12-7 22:35:29 LinkTalk.NET(909327571) 鍛靛懙 2009-12-7 22:35:32 鏆楀鏁欑埗(199033) 浠涔堥兘鏈夊彲鑳藉彂鐢?br> 2009-12-7 22:35:45 LinkTalk.NET(909327571) 浼犵粺鐨勬父鎴忔湇鍔″櫒錛屽崟鍙板埌涓や笁涓囧茍鍙戝凡緇忓緢鐗沊浜?br> 2009-12-7 22:35:50 鏆楀鏁欑埗(199033) 鏈煡鍥犵礌澶 2009-12-7 22:36:00 鏆楀鏁欑埗(199033) 鎴戜及璁?W榪樿兘涓?br> 2009-12-7 22:36:00 LinkTalk.NET(909327571) 鑰屼笖紜歡榪樹笉宸殑鎯呭喌涓?br> 2009-12-7 22:36:11 LinkTalk.NET(909327571) 娓告垙鐨勬暟鎹氫俊閲忔瘮杈冨ぇ 2009-12-7 22:36:22 LinkTalk.NET(909327571) 鍡?br> 2009-12-7 22:36:30 鏆楀鏁欑埗(199033) 娌¤繃6W鏄洜涓哄鎴風鐨勭鍙e熀鏈笂娌′簡 2009-12-7 22:36:45 LinkTalk.NET(909327571) 榪欎釜涓嶄細鍟?br> 2009-12-7 22:36:51 LinkTalk.NET(909327571) 瀹㈡埛绔鍙f病鏈夊叧緋葷殑 2009-12-7 22:36:55 鏆楀鏁欑埗(199033) 鏈夊惂 2009-12-7 22:36:59 LinkTalk.NET(909327571) 鍥犱負IP涓嶄竴鏍?br> 2009-12-7 22:37:11 鏆楀鏁欑埗(199033) 涓嶆槸銆傛垜嫻嬭瘯鐨勬椂鍊?br> 2009-12-7 22:37:15 LinkTalk.NET(909327571) 鍚屼竴涓狪P鏈?5535涓鍙g殑闄愬埗 2009-12-7 22:37:18 鏆楀鏁欑埗(199033) 6涓囦釜榪炴帴浠庝竴鍙版満鍣ㄦ潵鐨?br> 2009-12-7 22:37:18 LinkTalk.NET(909327571) 鍝︼紝浜嗚В 2009-12-7 22:37:23 LinkTalk.NET(909327571) 鍡?br> 2009-12-7 22:37:54 david(258667581) 鏈嶅姟鍣ㄧ鍙洃鍚竴涓鍙?搴旇涓嶄細鏈夌鍙f暟闄愬埗鍚э紵 2009-12-7 22:38:24 LinkTalk.NET(909327571) 鏈嶅姟鍣ㄧ涓嶄細 2009-12-7 22:38:50 david(258667581) 鍋氭父鎴忕殑璇?涓嶆槸閮介泹鍜屽鏈嶅姟鍣ㄥ悧 2009-12-7 22:38:55 david(258667581) 閮藉仛鐨勬湇鍔″櫒鍚?br> 2009-12-7 22:39:24 鏆楀鏁欑埗(199033) 銆傘傘?br> 2009-12-7 22:39:32 鏆楀鏁欑埗(199033) 鎴戞槸鍋氭祴璇?br> 2009-12-7 22:39:36 david(258667581) 鍙﹀ 濡傛灉绔彛socket灞炴ц緗畆euse涓簍rue 鏄惁鍙互瓚呰繃6W绔彛 2009-12-7 22:39:48 LinkTalk.NET(909327571) 涓嶄細 2009-12-7 22:39:53 鏆楀鏁欑埗(199033) 鏈嶅姟鍣ㄧ鏄竴鍙版満鍣紝瀹㈡埛绔篃鏄竴鍙版満鍣?br> 2009-12-7 22:39:56 LinkTalk.NET(909327571) 閭d釜鏄拡瀵逛笉鍚岀殑protocol 2009-12-7 22:40:02 鏆楀鏁欑埗(199033) 瀹㈡埛绔彂璧?W涓繛鎺?br> 2009-12-7 22:40:19 鏆楀鏁欑埗(199033) 灝辮鍗犵敤6W澶氫釜绔彛 2009-12-7 22:40:18 david(258667581) 涓嶅悓鐨刾rotocol鏄粈涔堟剰鎬?br> 2009-12-7 22:40:35 LinkTalk.NET(909327571) tcp 鍜?udp 鍙互reuse鍚屼竴涓猵ort 2009-12-7 22:41:09 LinkTalk.NET(909327571) erlang鍏跺疄鎴戝彧鏄ぇ姒傜殑浜嗚В 2009-12-7 22:41:22 LinkTalk.NET(909327571) 鎴戞墦綆楃敤C#鍜孞ava妯℃嫙erlang 2009-12-7 22:41:26 david(258667581) 紼嬪簭a璇曠敤绔彛2000 tcp榪?鐒跺悗 紼嬪簭b鐢?000绔彛udp鍐嶈繛鎺ュ彟澶栦竴涓▼搴忥紵 2009-12-7 22:41:36 david(258667581) 妯℃嫙錛?br> 2009-12-7 22:41:40 LinkTalk.NET(909327571) 鍡?br> 2009-12-7 22:41:47 LinkTalk.NET(909327571) 鎴戝凡緇忕敤C#瀹炵幇浜?br> 2009-12-7 22:41:47 david(258667581) 鎬庝箞妯℃嫙錛?br> 2009-12-7 22:41:59 LinkTalk.NET(909327571) 灝辨槸Actor妯″紡 2009-12-7 22:42:07 LinkTalk.NET(909327571) 鑷繁瀹炵幇娑堟伅鐨勮皟搴?br> 2009-12-7 22:42:15 LinkTalk.NET(909327571) 榪樻湁瀹炵幇寮傛緙栫▼鎺ュ彛 2009-12-7 22:42:41 david(258667581) actor妯″紡鏄粈涔堟剰鎬?br> 2009-12-7 22:42:59 LinkTalk.NET(909327571) 涓縐嶈蔣浠惰璁℃ā寮?br> 2009-12-7 22:43:16 LinkTalk.NET(909327571) erlang/scala絳夊茍鍙戝鉤鍙伴兘鏄痑ctor妯″紡 2009-12-7 22:44:06 david(258667581) 涓嶆噦 2009-12-7 22:44:25 david(258667581) 涓轟粈涔堣鐢╟#妯℃嫙錛?br> 2009-12-7 22:44:33 LinkTalk.NET(909327571) 鍥犱負鎴戠啛鎮(zhèn)塁# 2009-12-7 22:44:39 LinkTalk.NET(909327571) 涔熸墦綆楃敤java妯℃嫙 2009-12-7 22:45:01 LinkTalk.NET(909327571) 鍚屾椂涔熷洜涓篊#/Java鏈夊ぇ閲忕殑寮鍙戜漢鍛樺拰涓板瘜鐨勭涓夋柟鎵╁睍 2009-12-7 22:45:25 LinkTalk.NET(909327571) 鍚屾椂涔熸湁寰堢埥鐨処DE 2009-12-7 22:45:26 LinkTalk.NET(909327571) 錛氾級 2009-12-7 22:45:42 david(258667581) 鏄?浣嗘槸鎰熻濡傛灉浣犳槸瑕佹祴鎬ц兘鐨勮瘽 c#鐨勬ц兘鍙兘璺熶笉涓奺rlang鍟?br> 2009-12-7 22:45:49 david(258667581) 鐢╟鐨勯兘浼氬ソ浜?br> 2009-12-7 22:46:01 LinkTalk.NET(909327571) 鍏跺疄erlang璇█鏈韓鎬ц兘涓嶈寰楅珮錛屽洜涓烘槸鑴氭湰璇█ 2009-12-7 22:46:15 LinkTalk.NET(909327571) 楂樺茍鍙戞槸鍥犱負綰秷鎭紶閫掞紝鍙互鏈夋晥鐨勯伩鍏嶆閿?br> 2009-12-7 22:46:27 LinkTalk.NET(909327571) 浼犵粺璇█姣斿c/c++瑕侀伩鍏嶆閿佹瘮杈冮毦 2009-12-7 22:46:49 LinkTalk.NET(909327571) 緇欏ぇ瀹剁湅鑰佸鐨勪竴涓祴璇曟暟鎹?br> 2009-12-7 22:46:57 LinkTalk.NET(909327571) erlang鍏跺疄綆楁槸鎵ц鏁堢巼鐩稿姣旇緝宸殑 2009-12-7 22:47:20 david(258667581) 鍝噷 erlang鐨勬ц兘搴旇鏄彲浠ヨ窡c鍙澘鐨?br> 2009-12-7 22:48:04 LinkTalk.NET(909327571) http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=csharp&lang2=hipe&box=1 2009-12-7 22:48:16 LinkTalk.NET(909327571) 榪欎釜閲岄潰鏈夊緢澶氳璦鐨勬ц兘嫻嬭瘯姣旇緝 2009-12-7 22:48:23 LinkTalk.NET(909327571) erlang綆楁槸姣旇緝宸殑 2009-12-7 22:49:02 LinkTalk.NET(909327571) 浼犵粺璇█杈句笉鍒伴珮騫跺彂鏄洜涓烘棤娉曟湁鏁堢殑閬垮厤姝婚攣錛岃繕鏈塩pu璋冨害鍋氬緱涓嶅ソ 2009-12-7 22:50:17 鏆楀鏁欑埗(199033) 鎭╋紝C濡傛灉浣跨敤erlang鐨勬ā寮?br> 2009-12-7 22:50:26 鏆楀鏁欑埗(199033) 緇濆涓嶄細杈?br> 2009-12-7 22:50:29 LinkTalk.NET(909327571) 鍡?br> 2009-12-7 22:50:37 LinkTalk.NET(909327571) erlang鏈韓灝辨槸C鍐欑殑 2009-12-7 22:50:41 鏆楀鏁欑埗(199033) 鎭?br> 2009-12-7 22:50:54 LinkTalk.NET(909327571) 鎴戣寰楀浗鍐呭ソ鍍忔湁涓墰浜哄湪鐮旂┒鐢–++妯℃嫙erlang 2009-12-7 22:51:00 LinkTalk.NET(909327571) 濂藉儚鏄洓澶х殑涓涓灦鏋勫笀 2009-12-7 22:51:13 鏆楀鏁欑埗(199033) 璨屼技鐜板湪鍋歭inux涓嬪仛鏈嶅姟鍣ㄧ寰楋紝C姣擟++澶氫簡 2009-12-7 22:51:20 LinkTalk.NET(909327571) 鍡?br> 2009-12-7 22:51:29 LinkTalk.NET(909327571) linux涓媍澶?br> 2009-12-7 22:51:36 鏆楀鏁欑埗(199033) 鎴戣寰楀ソ鍍忎簯椋庢妸澶ц瘽瑗挎父鐨勬湇鍔″櫒绔敼鎴怌浜?br> 2009-12-7 22:52:28 灝忕敓鍟婄墮(86753957) 51.com鐨勬湇鍔″櫒灝辨槸鐢–++妯℃嫙erlang鐨?br> 2009-12-7 22:52:50 灝忕敓鍟婄墮(86753957) 浣跨敤鍗忕▼ 2009-12-7 22:53:59 LinkTalk.NET(909327571) 鍡紝鍗忕▼鍙互鍦ㄤ紶緇熺殑闈㈠悜榪囩▼鐨勭嚎紼嬩笂妯℃嫙寮傛鎿嶄綔 2009-12-7 22:55:05 LinkTalk.NET(909327571) 鍏跺疄楂樺茍鍙戝彧鏄竴縐嶈璁℃ā寮?br> 2009-12-7 22:55:19 LinkTalk.NET(909327571) erlang鎶婅繖涓璁℃ā寮忓浐鍖栧茍寮哄埗鍒拌娉曢噷浜?br> 2009-12-7 22:56:22 LinkTalk.NET(909327571) C#2.0寮濮嬫湁涓柊鐨勭壒鎬э紝鍙玦terator錛岄氳繃yield鍏抽敭瀛楁潵瀹炵幇coroutine錛堝崗紼嬶級 2009-12-7 22:56:39 LinkTalk.NET(909327571) 騫朵笖鍦ㄨ娉曚笂涔熷彲浠ョ敤榪炶瘡鐨勫艦寮忔潵瀹炵幇寮傛鐨勬搷浣?br> 2009-12-7 22:56:49 LinkTalk.NET(909327571) 鍜宔rlang鐨勫艦寮忕被浼?br> 2009-12-7 22:57:10 LinkTalk.NET(909327571) java閲岄潰鐩墠鍙湁anonymous class鍙互瀹炵幇寮傛璋冪敤 2009-12-7 22:57:44 LinkTalk.NET(909327571) 浣嗘槸閭d釜璇硶鍐欒搗鏉ユ湁浜涚壍寮猴紝鑺辨嫭鍙蜂細瓚婂祵瓚婃繁 2009-12-7 22:59:19 LinkTalk.NET(909327571) 鎴戠敤C#瀹炵幇鐨刟ctor妯″紡涔熷彲浠ュ鐞嗘瘡鍒嗛挓澶ф200涓囨潯娑堟伅錛堝湪PC涓婏級 2009-12-7 22:59:24 LinkTalk.NET(909327571) AMD鍙屾牳 2009-12-7 23:00:28 LinkTalk.NET(909327571) 涔熸祴璇曡繃HTTP 璇鋒眰錛屽ぇ姒傚彲浠ヨ揪鍒?涓囧騫跺彂錛屼笉榪囨槸6縐掍竴涓姹傦紙sleep6縐掞紝瀹為檯浼氬歡榪熷埌10縐掍互涓婏級錛宑pu鍗犵敤40-60 2009-12-7 23:01:54 LinkTalk.NET(909327571) 姣忓垎閽?00涓囨秷鎭槸鏈綆鍗曠殑ping/pong嫻嬭瘯 2009-12-7 23:06:12 david(258667581) 浠ュ墠娌″惉璇磋繃 鍗忕▼ 鍛靛懙 2009-12-7 23:06:33 LinkTalk.NET(909327571) 鏄惁鏈夊崗紼嬫棤鎵璋撶殑 2009-12-7 23:07:14 LinkTalk.NET(909327571) 鍏抽敭鏄函娑堟伅浼犻掞紙閬垮厤姝婚攣錛夎繕鏈夌嚎紼嬪悎鐞嗘湁鏁堢殑璋冨害錛堝疄鐜伴珮鏁堢殑寮傛澶勭悊錛?br> 2009-12-7 23:07:35 david(258667581) 鎭?鍏抽敭鏄伩寮閿?br> 2009-12-7 23:08:04 LinkTalk.NET(909327571) 騫舵渶濂藉啀鑳藉鍦ㄨ娉曚笂灝嗗紓姝ユ搷浣滅敤欏哄簭鍖栫殑浠g爜鏉ヨ〃紺?br> 2009-12-7 23:08:22 LinkTalk.NET(909327571) 瀹炲湪涓嶈涔熸棤鎵璋擄紝鍙互鐢╡vent handler鐨勬柟寮?br> 2009-12-7 23:08:48 david(258667581) 鑳藉惁涓句竴涓紓姝ユ搷浣滅殑鍏蜂綋搴旂敤鍦烘櫙錛?br> 2009-12-7 23:09:08 LinkTalk.NET(909327571) 寰堝閮芥槸寮傛鎿嶄綔錛堥偅鏍稩O鎵嶅彲浠ュ仛鍒伴珮鏁堬級 2009-12-7 23:09:19 LinkTalk.NET(909327571) 姣斿epoll鍜寃indows鐨刬ocp 2009-12-7 23:09:22 LinkTalk.NET(909327571) 閮芥槸寮傛鐨?br> 2009-12-7 23:09:44 LinkTalk.NET(909327571) 綆鍗曠殑鍘熺悊灝辨槸璋冪敤鍑芥暟閫掍氦鎴栨敞鍐屼竴涓狪O璇鋒眰鍒扮郴緇熷唴鏍?br> 2009-12-7 23:09:45 david(258667581) 鏄笉鏄兘鏄簳灞傜殑 2009-12-7 23:09:55 LinkTalk.NET(909327571) 鐒跺悗涓嶉渶瑕侀樆濉烇紝绔嬪嵆榪斿洖 2009-12-7 23:10:17 LinkTalk.NET(909327571) 緋葷粺IO鍐呮牳鏀跺埌鏁版嵁鎴栫浉鍏崇殑浜嬩歡浼氳Е鍙戝綋鍒濇敞鍐岀殑鍥炶皟鍑芥暟 2009-12-7 23:10:59 LinkTalk.NET(909327571) 璋冪敤璇鋒眰 鍜?鏁版嵁榪斿洖鎴栦簨浠惰Е鍙?涓嶅湪鍚屼竴涓搷浣滅郴緇熺嚎紼嬩笂瀹屾垚錛屽氨縐頒負寮傛 2009-12-7 23:11:13 LinkTalk.NET(909327571) 寮傛鐨処O鎵嶆瘮杈冮珮鏁?br> 2009-12-7 23:11:37 LinkTalk.NET(909327571) 鎿嶄綔緋葷粺鐨勭嚎紼嬫暟鏈夐檺鍒?br> 2009-12-7 23:11:42 david(258667581) 榪欎簺閮戒笉闅?鏃犺鏄痡ava鍜宑#榪樻槸c錛岄兘宸茬粡鏈変笓闂ㄧ殑api鏀拺浜?br> 2009-12-7 23:11:51 david(258667581) 鍏抽敭鏄笟鍔′笂鐨勬搷浣? 2009-12-7 23:11:55 LinkTalk.NET(909327571) 涓鑸笂浜嗗崈浠ュ悗錛岀嚎紼嬬殑鏁堢巼灝辨瘮杈冨樊浜?br> 2009-12-7 23:11:58 david(258667581) 閿佺殑閮芥槸涓氬姟 2009-12-7 23:12:02 LinkTalk.NET(909327571) 鑰屼笖寰堣梒pu鍜屽唴瀛?br> 2009-12-7 23:12:23 LinkTalk.NET(909327571) 鎵浠ヨ閫氳繃鍚堢悊鐨勮皟搴﹀拰寮傛鎿嶄綔鏉ュ垎浜疂璐電殑鎿嶄綔緋葷粺綰跨▼ 2009-12-7 23:12:51 LinkTalk.NET(909327571) 涓ユ牸閬靛畧actor妯″紡鍙互鏈夋晥鐨勯伩鍏嶆閿? 2009-12-7 23:13:04 david(258667581) [琛ㄦ儏] 2009-12-7 23:14:34 LinkTalk.NET(909327571) 鎴戜篃鍦ㄦ懜绱㈠拰灝濊瘯錛宔rlang鐨勬秷鎭皟搴﹀拰鍒嗗竷寮忔敮鎸佹槸鐩墠鏈濂界殑 2009-12-7 23:14:49 LinkTalk.NET(909327571) scala涔熶笉閿欙紝twitter灝辨斁寮僥rlang杞悜scala 2009-12-7 23:15:00 LinkTalk.NET(909327571) 浣嗘槸scala鍦ㄥ垎甯冨紡鏀寔鏂歸潰涓嶅強erlang 2009-12-7 23:15:30 LinkTalk.NET(909327571) 浣嗘槸scala鏈夋渶澶х殑濂藉灝辨槸鍩轟簬JVM錛屽彲浠ュ埄鐢╦ava鐨勫悇縐嶅ソ澶?br> 2009-12-7 23:15:33 david(258667581) 鍒嗗竷寮忎互鍚庢槸瓚嬪娍 鎵浠ユ劅瑙塭rlang鐨勭敓鍛藉姏搴旇榪樻槸寰堝己鐨?br> 2009-12-7 23:15:44 LinkTalk.NET(909327571) 鍡紝鍒嗗竷寮忓叾瀹炲叾浠栬璦涔熷彲浠ュ仛鐨?br> 2009-12-7 23:16:05 LinkTalk.NET(909327571) 鍙槸erlang宸茬粡鍋氫簡鍗佸嚑騫翠簡 2009-12-7 23:16:19 LinkTalk.NET(909327571) 鍏朵粬璇█涔熻偗瀹氫細閫愭笎鏀寔鐨?br> 2009-12-7 23:16:25 david(258667581) 鎭?br> 2009-12-7 23:16:43 LinkTalk.NET(909327571) 浣嗘槸鎴戜釜浜烘瘮杈冭寰楅仐鎲劇殑鏄痚rlang鐨勮娉曞拰緙栫▼妯″紡 2009-12-7 23:17:08 LinkTalk.NET(909327571) 濡傛灉erlang浠g爜涓婂埌涓瀹氱殑閲忎互鍚庣淮鎶ゅ拰璋冭瘯灝辯浉褰撻夯鐑︿簡 2009-12-7 23:17:11 david(258667581) 璇硶涔犳儻浜嗗氨濂?鍏抽敭鏄浜庣粨鏋勭殑鏀寔 2009-12-7 23:17:17 david(258667581) 鍙鎬уお宸?br> 2009-12-7 23:17:31 LinkTalk.NET(909327571) 鍡紝鏁版嵁緇撴瀯琛ㄧ幇鍔涗篃涓嶅涓板瘜 2009-12-7 23:17:35 LinkTalk.NET(909327571) 閮芥槸tuple 2009-12-7 23:17:43 LinkTalk.NET(909327571) 鐪肩潧瑕佺湅鑺變簡 2009-12-7 23:19:09 david(258667581) 寮鍙戠幆澧冧篃娌¤窡涓?娌℃湁寰堝ソ鐨処DE 2009-12-7 23:19:16 LinkTalk.NET(909327571) 鍡?br> 2009-12-7 23:19:37 LinkTalk.NET(909327571) 鑴氭湰璇█閲嶆瀯璧鋒潵灝辯浉褰撻夯鐑︿簡 2009-12-7 23:19:57 T.t.T!Ck.錕?(121787333) 鏈変竴涓佸涔熺敤C#鏉ユā鎷焑rlang鐨勬ā寮?br> 2009-12-7 23:20:06 LinkTalk.NET(909327571) 鍥犱負鏃犵被鍨嬶紝鏃犳硶鍙嶅皠鍏冩暟鎹紝娌℃湁鍔炴硶鑷姩鐢熸垚鏂囨。錛屾洿闅鵑噸鏋?br> 2009-12-7 23:20:07 Lenn(28663) ERLANG璺烰ava涓鏍鋒槸緙栬瘧鎬佽璦錛屾庝箞鎴愯剼鏈璦浜?br> 2009-12-7 23:20:22 LinkTalk.NET(909327571) erlang涓ユ牸鏉ヨ鏄剼鏈?br> 2009-12-7 23:20:31 LinkTalk.NET(909327571) 寮辯被鍨嬬殑鍩烘湰閮芥槸鑴氭湰 2009-12-7 23:20:44 LinkTalk.NET(909327571) 鍖呮嫭php涔熷彿縐版敮鎸佺紪璇?br> 2009-12-7 23:20:47 LinkTalk.NET(909327571) 鍏跺疄榪樻槸鑴氭湰 2009-12-7 23:21:16 Lenn(28663) bin code鍙湁200澶氭潯鎸囦護錛屽睘浜庡吀鍨嬬殑涓棿澶璦錛屾晥鐜囦笉浼氭瘮Java宸灝?br> 2009-12-7 23:21:34 LinkTalk.NET(909327571) 鍡?br> 2009-12-7 23:21:48 LinkTalk.NET(909327571) 鎴戣寰椾換浣曚笢瑗塊兘鏈夊緱蹇呮湁澶?br> 2009-12-7 23:21:57 LinkTalk.NET(909327571) 涓鏂歸潰澶己浜嗭紝姣斿鏈夊叾浠栫殑緙洪櫡 2009-12-7 23:22:06 LinkTalk.NET(909327571) 灝辯湅鑷繁鐨勫枩濂藉拰鍏蜂綋鐨勫簲鐢ㄥ満鏅簡 2009-12-7 23:22:08 Lenn(28663) 鍥懼艦澶急 2009-12-7 23:22:47 Lenn(28663) 璋冭瘯璧鋒潵鏈鐖斤紝涓氬姟鎯沖浜嗗熀鏈笉浼氱紪紼嬩粠鍑洪敊 2009-12-7 23:23:16 LinkTalk.NET(909327571) 鍡?br> 2009-12-7 23:24:26 Lenn(28663) 鎴戜滑灝辨槸涓涓渚嬶紝鐢吉錛★級錛″仛鐨勪笢瑗匡紝鐜板湪榪樹笉鍋滄敼浠g爜錛岋譏锝掞綄锝侊綆锝囬偅涓鍧楋紝瑕佹敼涔熷彧鏄嚑琛屼竴浼氱殑浜嬫儏 2009-12-7 23:25:17 jack(357794482) 鍏跺疄榪欑浜嬫儏瑕佺湅浣犲璇█鐨勫鐞嗚兘鍔? 2009-12-7 23:25:20 LinkTalk.NET(909327571) 鍡?br> 2009-12-7 23:25:35 LinkTalk.NET(909327571) google鐨勯甯灦鏋勫笀鏄悶java鐨?br> 2009-12-7 23:25:41 LinkTalk.NET(909327571) 鍏跺疄榪欎釜鐪嬪叿浣撴儏鍐電殑 2009-12-7 23:26:17 Lenn(28663) 鐢ㄤ粈涔堣繕鏈夊巻鍙插師鍥狅紝姣斿鏂扮殑facebook寰堝鐢‥rlang 2009-12-7 23:26:33 Lenn(28663) 鍥犱負鍋氬ソ鐨勪笢瑗挎洿鏀硅璦鏄釜澶ч棶棰?br> 2009-12-7 23:26:36 LinkTalk.NET(909327571) 浣嗘槸鏇存柊鐨則witter鐢眅rlang杞悜浜唖cala 2009-12-7 23:26:58 LinkTalk.NET(909327571) 鍙﹀erlang鍗佸嚑騫翠簡錛屽埌浠婂ぉ鎵嶇孩錛屼篃鏄湁涓瀹氱殑鍘熷洜鐨?br> 2009-12-7 23:27:13 LinkTalk.NET(909327571) erlang鏈夐潪甯哥獊鍑虹殑浼樺娍錛屼絾鏄篃瀛樺湪涓浜涗笉澶熷畬緹庣殑鍦版柟 2009-12-7 23:29:04 Lenn(28663) 鐜板湪紺懼尯涔熸尯媧昏穬錛屼笟鍔℃湁姣旇緝寮虹殑浼樺娍 2009-12-7 23:29:37 LinkTalk.NET(909327571) 鍡紝鏄殑錛涳級 2009-12-7 23:29:57 LinkTalk.NET(909327571) 鎵浠ュ氨綆楀叾浠栬璦鐨勫紑鍙戜漢鍛樹篃寮濮嬩簡瑙?br> 2009-12-7 23:30:02 LinkTalk.NET(909327571) 瀛︿範銆?br> 2009-12-7 23:30:04 Lenn(28663) 鍥懼艦鏂歸潰鍗翠笣姣笉琛?br> 2009-12-7 23:30:05 LinkTalk.NET(909327571) 鎴栨ā鎷焑rlang 2009-12-7 23:30:08 LinkTalk.NET(909327571) 鍡?br> ]]> Patch Mnesia 浣跨敤TokyoCabinet寮曟搸紿佺牬2G瀛樺偍闄愬埗 http://m.shnenglu.com/keigoliye/archive/2009/09/29/97547.html鏆楀鏁欑埗 鏆楀鏁欑埗 Tue, 29 Sep 2009 07:12:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/29/97547.html http://m.shnenglu.com/keigoliye/comments/97547.html http://m.shnenglu.com/keigoliye/archive/2009/09/29/97547.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/97547.html http://m.shnenglu.com/keigoliye/services/trackbacks/97547.html 涓哄暐瑕丳ATCH錛?/p>
Mnesia鏈澶х殑緙洪櫡鏄瓨鍌ㄩ檺鍒躲傝繖涓嶆槸鏁版嵁搴撶郴緇熺殑閿欒錛屽洜涓篗nesia鑳藉鎺у埗铏氭嫙鏁版嵁鐨勫ぇ灝忋備富瑕佺殑闂鍦ㄤ簬榪囨椂鐨凟rlang DETS瀛樺偍寮曟搸錛岄熷害鎱㈠茍涓斾嬌鐢ㄧ殑32浣嶅亸縐婚噺錛堥檺鍒跺崟鏂囦歡澶у皬涓?GB錛夈?
鎬濊礬錛?/p>
瓚呬箮鎯寵薄鐨?mnesia 琛ヤ竵鍖?mnesiaex 銆傝繖涓笢瑗胯В闄や簡鍔犲湪 mnesia 鏁版嵁搴撶郴緇熶笂鎵鏈夌殑闄愬埗(铏借涓婇潰宸茬粡鎻愬埌錛屽疄闄呬笂 mnesia 浠g爜鏈韓娌℃湁浠涔堢湡姝g殑闄愬埗)鈥斺斾綘鐜板湪鍙互鐢?SleepyCat/BerkeleyDB/MySQL/Amazon S3/Tokyo Cabinet/… 鐢氳嚦鏄綘鑷繁鍠滄鐨勬煇縐嶄笢瑗挎潵褰撲綔 mnesia 鐨勫悗绔紝灝卞儚 ets/dets 涓鏍楓傝岃闂殑鎺ュ彛浠嶄繚鎸佷笉鍙樷斺旂戶緇部鐢?mnesia 鐨勬帴鍙o紝涓琛屼篃涓嶇敤鏀廣?DIY 榪欑鎵╁睍涔熷彉寰楃浉褰撳鏄擄紝鍐欎竴涓?behavior 灝辨垚浜嗐?/p>
瀹炵幇榪囩▼
1錛氫笌浠庢簮浠g爜緙栬瘧鐨勬柟寮忓畨瑁匛rlang
tar xvf otp_src_R12B-5.tar.gz
cd otp_src_R12B-5
./configure & make & make install
娉ㄦ剰錛氭垜鐨勭郴緇熸槸RHEL 5.3錛岄粯璁ゅ畨瑁呯洰褰曚負/usr/local/erlang
2錛氬畨瑁匨nesiaex
tar xvf mnesia-4.4.7.6.tar.gz
cd mnesia-4.4.7.6
./configure --prefix=/usr/local
make
make check
make install
娉ㄦ剰錛氳繖閲屼竴瀹氳鎸囧畾prefix錛屼笉鐒跺氨瑁呭埌/usr鐩綍鍘諱簡
3錛氬畨瑁匱okyo Cabinet
tar xvf tokyocabinet-1.4.10.tar.gz
cd tokyocabinet-1.4.10
./configure --prefix=/usr
make & make install
3錛氬畨瑁卼cerl
tar xvf tcerldrv-1.3.1e.tar.gz
cd tcerldrv-1.3.1e
./configure --prefix=/usr
make & make install
tar xvf tcerl-1.3.1e.tar.gz
cd tcerl-1.3.1e
./configure --prefix=/usr/local
make & make install
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/jimmychou/archive/2009/03/13/3988468.aspx
]]> 鍏充簬Erlang鍜孲MP鐨勪竴浜涜鏄?/title> http://m.shnenglu.com/keigoliye/archive/2009/09/24/97172.html鏆楀鏁欑埗 鏆楀鏁欑埗 Thu, 24 Sep 2009 14:23:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/24/97172.html http://m.shnenglu.com/keigoliye/comments/97172.html http://m.shnenglu.com/keigoliye/archive/2009/09/24/97172.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/97172.html http://m.shnenglu.com/keigoliye/services/trackbacks/97172.html
http://shiningray.cn/some-facts-about-erlang -and-smp.html
鍘熸枃錛?a >http://groups.google.com/group/erlang -questions/browse_thread/thread/7827f5e32681ca8e
by.Kenneth Erlang /OTP team, Ericsson 璇戯細ShiningRay
浠ヤ笅鏄竴浜?span class=hilite1>Erlang SMP瀹炵幇鐨勭粏鑺傚拰涓庢ц兘涓庝幾緙╂х浉鍏充竴浜涚畝鍗曚粙緇嶃?/p>
鍑犲懆涔嬪唴榪樻湁鏈変竴涓叧浜庡鏍稿浣曡繍浣滀互鍙婃湭鏉ュ浣曞彂灞曠殑鏇磋緇嗙殑浠嬬粛銆傛垜鎵撶畻灝嗕竴浜涘唴瀹規(guī)斁鍦ㄦ垜鐨勬姤鍛婁腑錛屽皢浜?鏈?7鏃ョ殑ICFP2008錛?span class=hilite1>Erlang Workshop鍦╒ictoria BC灞曠ず緇欏ぇ瀹躲?/p>
娌℃湁SMP鏀寔鐨?span class=hilite1>Erlang VM鍙湁1涓繍琛屽湪涓誨鐞嗙嚎紼嬩腑鐨勮皟搴﹀櫒銆傝璋冨害鍣ㄤ粠榪愯闃熷垪錛坮un-queue錛変腑鍙栧嚭鍙互榪愯鐨?span class=hilite1>Erlang榪涚▼浠ュ強IO浠誨姟錛岃屼笖鍥犱負鍙湁涓涓嚎紼嬭闂粬浠墍浠ユ棤欏婚攣瀹氫換浣曟暟鎹?/p>
鑰屽甫鏈塖MP鏀寔鐨?span class=hilite1>Erlang VM鍙互鏈変竴涓垨澶氫釜璋冨害鍣紝姣忎釜榪愯鍦ㄤ竴涓嚎紼嬩腑銆傝皟搴﹀櫒浠庡悓涓涓叕鍏辮繍琛岄槦鍒椾腑鍙栧嚭鍙繍琛岀殑Erlang 榪涚▼鍜孖O浠誨姟銆傚湪SMP VM涓墍鏈夌殑鍏變韓鏁版嵁緇撴瀯閮戒細鐢遍攣榪涜淇濇姢錛岃繍琛岄槦鍒楀氨鏄繖鏍蜂竴涓敱閿佷繚鎶ょ殑鏁版嵁緇撴瀯銆?/p>
浠嶰TP R12B寮濮嬶紝濡傛灉鎿嶄綔緋葷粺鎶ュ憡鏈夊浜?涓殑CPU錛堟垨鑰呮牳蹇冿級VM鐨凷MP鐗堟湰浼氳嚜鍔ㄥ惎鍔紝騫朵笖鏍規(guī)嵁CPU鎴栬呮牳蹇冪殑鏁伴噺鍚姩鍚屾牱鏁伴噺鐨勮皟搴﹀櫒銆?/p>
浣犲彲浠ヤ粠“erl”鍛戒護鎵撳嵃鍑烘潵鐨勭涓琛岀湅鍒板畠閫夋嫨浜嗗摢浜涘弬鏁般備緥濡傦細
Erlang (BEAM) emulator version 5.6.4 [source] [smp:4] [asynch-threads:0] …..
鍏朵腑“[smp:4]”琛ㄧずSMP VM榪愯浜?涓皟搴﹀櫒銆?/code>
榛樿鍊煎彲浠ョ敤“-smp [enable|disable|auto]”鏉ユ浛鎹紝auto鏄粯璁ょ殑銆傚鏋渟mp琚惎鐢ㄤ簡錛?smp enable錛夛紝瑕佽緗皟搴﹀櫒鐨勬暟閲忓彲浠ヤ嬌鐢?#8220;+S Number”鍏朵腑Number鏄皟搴﹀櫒鐨勬暟閲忥紙1鍒?024錛?/p>
娉ㄦ剰1錛氳繍琛屽浜嶤PU鎴栨牳蹇冩繪暟鐨勮皟搴﹀櫒涓嶄細鏈変換浣曟彁鍗囥?/p>
娉ㄦ剰2錛氬湪鏌愪簺鎿嶄綔緋葷粺涓竴涓繘紼嬪彲浣跨敤鐨凜PU鎴栬呮牳蹇冪殑鏁伴噺鍙互琚檺鍒躲備緥濡傦紝鍦↙inux涓紝鍛戒護“taskset”灝卞彲浠ュ疄鐜拌繖涓姛鑳姐?Erlang VM鐩墠榪樺彧鑳芥帰嫻婥PU鎴栬呮牳蹇冪殑鎬繪暟錛屼笉浼氳冭檻“taskset”鎵璁劇疆鐨勬帺鐮併傛鍥犲姝わ紝渚嬪鍙兘浼氬嚭鐜幫紙宸茬粡鍑虹幇榪囦簡錛夊嵆浣?span class=hilite1>Erlang VM榪愯浜?涓皟搴﹀櫒錛屼篃鍙嬌鐢ㄤ簡2涓牳蹇冦侽S浼氳繘琛岄檺鍒跺洜涓哄畠瑕佽冭檻“taskset”鎵璁劇疆鐨勬帺鐮併?/p>
姣忎釜Erlang VM鐨勮皟搴﹀櫒閮借繍琛屼簬涓涓狾S綰跨▼涓婏紝鏄疧S鏉ュ喅瀹氱嚎紼嬫槸鍚︽墽琛屽湪涓嶅悓鐨勬牳蹇冧笂銆備竴鑸潵璇碠S浼氬緢濂藉湴澶勭悊榪欎釜闂騫朵笖浼氫繚璇佺嚎紼嬪湪鎵ц鏈熼棿榪愯浜庡悓涓涓牳蹇冧笂銆?/p>
Erlang 榪涚▼浼氳涓嶅悓鐨勮皟搴﹀櫒榪愯錛屽洜涓轟粬浠槸浠庝竴涓叕鍏辮繍琛岄槦鍒椾腑琚彇鍑猴紝鐢遍鍏堝彲鐢ㄧ殑璋冨害鍣ㄨ繍琛屻?/p>
鎬ц兘鍜屼幾緙╂?/h3>
鍙湁涓涓皟搴﹀櫒鐨凷MP VM瑕佹瘮闈濻MP鐨刅M紼嶅井鎱㈤偅涔堜竴鐐圭偣銆係MP VM鍐呴儴闇瑕佺敤鍒板悇縐嶉攣錛屼笉榪囧彧瑕佷笉瀛樺湪閿佺殑浜夌敤錛岄偅涔堢敱閿佸紩璧風殑寮閿涓嶄細闈炲父澶э紙灝辨槸閿佷簤鐢ㄤ笂闈㈤渶瑕佽姳鏃墮棿錛夈傝繖涔熻В閲婁簡涓轟綍鍦ㄦ煇浜涙儏鍐典笅錛岃繍琛屽涓彧鏈変竴涓皟搴﹀櫒鐨凷MP VM瑕佹瘮鍖呭惈澶氫釜璋冨害鍣ㄧ殑鍗曚竴SMP VM鏇村姞楂樻晥銆傚綋鐒惰繍琛屽涓猇M瑕佹眰搴旂敤鍙互鎸夌収澶氫釜騫惰浠誨姟鐨勬柟寮忚繍琛屽茍涓斾箣闂存病鏈夋垨鑰呭嚑涔庝笉閫氳銆?/p>
涓涓▼搴忔槸鍚﹁兘鍦ㄥ鏍鎬笂鐨凷MP VM涓壇濂藉湴榪涜鎻愬崌寰堝ぇ紼嬪害涓婂彇鍐充簬紼嬪簭鐨勬ц川錛屾煇浜涚▼搴忓彲浠ヤ繚鎸佺嚎鎬ф彁鍗囪嚦8鏍哥敋鑷?6鏍革紝鍚屾椂鍏朵粬鏌愪簺紼嬪簭鍩烘湰涓嶈兘鎻愬崌錛岃繛2鏍擱兘涓嶈銆傚疄闄呭簲鐢ㄤ腑寰堝紼嬪簭閮借兘鍦ㄤ富嫻佸競鍦虹殑鏍稿績鏁頒笂寰楀埌鎻愬崌錛岃涓嬫枃銆?/p>
鑻ュ茍琛岀殑鎸佺畫“閫氳瘽”鐢辨瘡涓牳蹇冧竴涓垨澶氫釜Erlang 榪涚▼鏉ヨ〃紺猴紝瀹為檯鐨勬敮鎸佸ぇ閲忛氳瘽鐨勭數(shù)淇′駭鍝佸凡緇忓厛鐜板嚭鍦ㄥ弻鏍稿拰鍥涙牳澶勭悊鍣ㄤ笂涓嶄織鐨勪幾緙╂с傛敞鎰忥紝榪欎簺浜у搧鏄湪SMP VM鍜屽鏍稿鐞嗗櫒鍑虹幇寰堜箙浠ュ墠鎸夌収鏅氱殑Erlang 椋庢牸鏉ュ啓鐨勶紝浠栦滑涔熻兘鏃犻』浠諱綍淇敼鐢氳嚦涓嶉渶閲嶆柊緙栬瘧浠g爜灝辮兘浠?span class=hilite1>Erlang SMP VM涓幏鐩娿?/p>
SMP鎬ц兘寰楀埌鎸佺畫鏀硅繘
SMP瀹炵幇姝h涓嶆柇鏀硅繘浠ヤ究鑳藉緱鍒版洿濂界殑鎬ц兘鍜屼幾緙╂с傚湪姣忎釜鏈嶅姟鍙戝竷鐗圧12B-1,2,3,4,5…,R13B絳夌瓑涓紝浣犻兘鑳藉彂鐜版柊鐨勪紭鍖栥?/p>
涓浜涘凡鐭ョ殑鐡墮
鍗曚竴鐨勫父瑙佽繍琛岄槦鍒楅殢鐫CPU鎴栨牳蹇冪殑鏁伴噺鐨勫鍔犱細鎴愪負涓涓樉钁楃殑鐡墮銆?/p>
榪欎粠4鏍稿紑濮嬪線涓婂氨浼氭樉鐜板嚭鏉ワ紝涓嶈繃4鏍鎬粛鐒跺彲浠ヤ負澶氭暟搴旂敤紼嬪簭鎻愪緵涓嶉敊鐨勬ц兘銆傛垜浠鍦ㄤ粠浜嬩竴涓瘡涓皟搴﹀櫒涓涓繍琛岄槦鍒楃殑瑙e喅鏂規(guī)硶浣滀負鐩墠鏈閲嶈鐨勬敼榪涖?/p>
Ets琛ㄦ牸浼氬紩鍏ラ攣銆傚湪R12B-4涔嬪墠鍦ㄦ瘡嬈″涓涓猠ts-table鐨勮闂腑浼氱敤鍒頒袱涓攣錛屼絾鏄湪R12B-4涓璵eta-table鐨勯攣琚紭鍖栬繃錛屽彲浠ユ樉钁楀噺灝戜簤鐢紙鍓嶉潰宸茬粡鎻愬埌浜夌敤鏄湁寰堝ぇ浠d環(huán)鐨勶級銆傚鏋滃緢澶?span class=hilite1>Erlang榪涚▼璁塊棶鍚屼竴涓〃鏍鹼紝灝變細鏈夊緢澶氶攣浜夌敤閫犳垚鎬ц兘闄嶄綆灝ゅ叾褰撹繖浜涜繘紼嬩富瑕佸伐浣滄槸璁塊棶ets-table銆傞攣瀛樺湪浜庤〃綰ц岄潪璁板綍綰с傛敞鎰忥紒榪欎篃浼氬獎鍝嶅埌Mnesia鍥犱負Mnesia鐢ㄥ埌浜嗗緢澶歟ts-table銆?/p>
鎴戜滑鍏充簬SMP鐨勭瓥鐣?/h3>
褰撴垜浠紑濮嬪疄鐜癝MP VM鐨勬渶鍒濓紝鎴戜滑灝辯‘瀹氫簡絳栫暐錛?#8220;棣栧厛璁╁畠鍙互榪愯錛岀劧鍚庢祴閲忥紝鐒跺悗浼樺寲”銆傝嚜浠?006騫翠簲鏈堟垜浠彂甯冧簡絎竴涓ǔ瀹氱殑SMP VM錛圧11B錛変互鏉ワ紝鎴戜滑涓鐩撮伒寰潃榪欎釜絳栫暐銆?/p>
榪樻湁鏇村宸茬煡鐨勪笢瑗垮彲浠ユ敼榪涳紝鎴戜滑浼氭寜鐓фц兘鐨勬敹鐩婂ぇ灝忓厛鍚庡悇涓嚮鐮淬?/p>
鎴戜滑灝嗕富瑕佺殑綺懼姏鏀懼湪澶氭牳錛堝ぇ浜?錛変笂鏇村ソ鐨勮繛緇幾緙╂т笂銆?/p>
鍗撹秺鍏歌寖
鍗充嬌SMP緋葷粺鏈夎繕鏈変竴浜涘凡鐭ョ殑鐡墮涓嶈繃宸茬粡鏈変笉閿欑殑鏁翠綋鎬ц兘鍜屼幾緙╂э紝鍚屾椂鎴戠浉淇″湪璁╃▼搴忓憳鍒╃敤澶氭牳鏈哄櫒浜嬪崐鍔熷嶆柟闈紝鎴戜滑鏄竴涓崜瓚婄殑鍏歌寖銆?/p>
]]> Erlang寮鍙戝緩璁?鏉傝鐗? http://m.shnenglu.com/keigoliye/archive/2009/09/24/97082.html鏆楀鏁欑埗 鏆楀鏁欑埗 Wed, 23 Sep 2009 17:00:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/24/97082.html http://m.shnenglu.com/keigoliye/comments/97082.html http://m.shnenglu.com/keigoliye/archive/2009/09/24/97082.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/97082.html http://m.shnenglu.com/keigoliye/services/trackbacks/97082.html erlang欏圭洰寮鍙戜腑鐨勪竴浜涜褰曪紝鍗沖寘鍚緢澶氶氫織鏄撴噦鐨勫師鍒欙紝涔熷寘鍚竴浜涗技鏄岄潪鐨勫緩璁紝姣旇緝娣蜂貢錛岃繕娌℃湁縐瘡鍒頒竴涓彲浠ュ垎闂ㄥ埆綾葷殑鍦版錛屽悇浣嶅氨灝嗗氨鐪嬪惂..
:) * 紜繚娌℃湁浠諱綍緙栬瘧璀﹀憡 * Erlang 涓璖tring閲囩敤list瀹炵幇錛?2浣嶇郴緇熶腑錛屽叾1涓瓧絎︾敤8涓瓧鑺傜殑絀洪棿錛?涓繚瀛榲alue,
4涓繚瀛樻寚閽?銆傚洜姝tring閫熷害杈冩參錛岀┖闂村崰鐢ㄨ緝澶? * 鍦⊿erver涓紝鎬繪槸灝藉姏涔﹀啓灝鵑掑綊(tail-recursive)鐨勫嚱鏁?
* 浣跨敤'++'鏃訛紝left list浼氳鎷瘋礉錛岀劧鍚庢坊鍔犲埌right list鐨勫ご閮紝鍥犳鏈濂芥妸length杈冪煭鐨刲ist鏀懼湪宸︿晶
* 閬垮厤浣跨敤regexp錛屽鏋滈渶瑕佹鍒欒〃杈懼紡錛岃浣跨敤re *
timer妯″潡鐨勫ぇ閮ㄥ垎鍑芥暟瀹炵幇錛屼緷璧栦簬涓涓猵rocess錛屽鏋滆繃澶氫嬌鐢╰imer錛屼細瀵艱嚧榪欎釜process璐熻澆榪囧ぇ錛屽獎鍝嶆晥鐜囥? 鎺ㄨ崘浣跨敤erlang :send_after/3鍙?span class="hilite1">erlang:start_timer/3 * 閬垮厤浣跨敤list_to_atom/1錛屽洜涓?span class="hilite1">erlang涓璦tom鏁伴噺鏈澶т負1048576, 涓斾笉榪涜GC鎺у埗銆傚洜姝ゅ鏋滄寔緇х殑璋冪敤list_to_atom/1
鍙兘寰堝鏄撹揪鍒扮郴緇熶笂闄愶紝浠庤屽鑷磂mulator terminate銆傝浣跨敤list_to_existing_atom/1銆? *
list鍐呴儴瀹炵幇涓轟竴涓垪琛紝鍥犳length(List), 闇瑕侀亶鍘嗘暣涓猯ist姣旇緝鑰楁椂 *
瀵逛簬涓嶅悓鐨勬暟鎹被鍨嬶紝浣跨敤涓嶅悓鐨剆ize鍑芥暟錛歵uple_size/1, byte_size/1, bit_size/1 * 浣跨敤binary
match鏉ヨ繘琛宐inary鐨勫垎鍓詫紝鑰屼笉浣跨敤split_binary/2 *
濡傛灉涓や釜list閮芥嫢鏈夊緢澶氭暟鎹紝閭d箞璇蜂笉瑕佷嬌鐢?--'錛岃屾槸灝嗘暟鎹漿鍖栧埌ordsets錛岀劧鍚庤皟鐢╫rdsets:substract/2. *
瀵逛簬binary鐩稿叧鎿嶄綔鍙互榪涜binary浼樺寲錛坆in_opt_info緙栬瘧閫夐」錛変唬鐮佹鏋訛細 *
f(<<Pattern1,...,Rest/bits>>,...) -> ... % Rest is
not used here f(Rest,...);
f(<<Pattern2,...,Rest/bits>>,...) -> ... % Rest is not
used here f(Rest,...); ... f(<<>>, ...)
-> ReturnValue. *
璋冪敤lists:flatten/1鍙互灝唋ist鎵佸鉤鍖栵紝榪欎釜鎿嶄綔浠d環(huán)寰堝ぇ錛屾瘮'++'榪樿鏄傝吹銆備笅闈㈣繖浜涙椂鍊欐垜浠彲浠ラ伩鍏嶏細 灝嗘暟鎹彂閫佺粰port鏃?
璋冪敤list_bo_binary/1鍜宨olist_to_binary鍓? * 灝忕殑鍑芥暟鍙互璁╂?zhèn)ㄦ柟渚跨殑鎵惧嚭閿欒鐨勫嚱鏁板拰浠g?
* 涓嶈鍦ㄥ悓涓琛屽嚭鐜扮浉鍚岀殑絎﹀彿 20 some_fun() -> 21 L = [{key1, v1},
{key2, [some_record#v21, v22]}], 22 ... 緙栬瘧鏃訛紝浼氭彁紺簂ine 21 '[' 璇硶閿欒錛?
鍥犱負21琛屾湁澶氫釜 '[' 錛屾墍浠ヨ繖涓猙ug涓嶈兘鍑嗙‘瀹氫綅錛屼綘闇瑕佽姳鏃墮棿鍘繪帓鏌ヤ唬鐮併? 濂界殑鍋氭硶鏄細 20 some_fun() ->
21 L = [{key1, v1}, 22 {key2, [some_record#v21, v22]}
23 ], ... 榪欐牱錛岀紪璇戝叾浼氭彁紺轟綘 line 22 '['
璇硶閿欒錛屼綘寰堝紑灝辯煡閬撴槸閭d釜鍦版柟閿欎簡銆? * 浣跨敤 CTRL 錛?\ 鎴?init:stop()錛?鍙互閫鍑?span class="hilite1">Erlang錛?浣跨敤CTRL 錛?G 鍙?CTRL + C 寮瑰嚭鑿滃崟閫夐」錛屽彲浠ラ夋嫨鏄惁閫鍑?span class="hilite1">Erlang銆? 鍏朵腑CTRL 錛?G鍙互鐢ㄦ潵榪炴帴鍏朵粬鐨剆hell錛?CTRL 錛?C鍙互鏌ョ湅鍏朵粬涓浜涚郴緇熶俊鎭?
Ctrl + C abort 鏄噹铔殑閫鍑烘柟寮? * use "open_port({fd,0,2}, [out])" make
erlang program write standard error to unix system
* If you don't run experiments before you start designing a new system,
your entire system will be an experiment! * standard data structure
desc: Module Description sets sets, i.e. a collection of unique
elements. gb_sets sets, but based on a general balanced data structure
gb_tree a general balanced tree dict maps, also called associative
arrays ets hash tables and ordered sets (trees) dets on-disk hash tables
Suggestion錛? elments count: 0 錛?100 | 100 - 10000 | 10000 - our
select : list | ets | gb_tree * 閫氳繃code:clash/0
媯嫻嬩唬鐮佷腑鏄惁鏈塵odule鍐茬獊鐜拌薄錛坰ticky) * epmd -d -d 鍚姩 epmd 鍙互鏌ョ湅erlang node涔嬮棿鐨勯氳 *
灝嗘甯哥殑閫昏緫浠g爜鍜岄敊璇鐞嗕唬鐮佸垎紱伙紝鍙戠敓閿欒鏃訛紝灝界閿欒銆傜敱鍙︿竴涓敊璇鐞嗘ā鍧楄繘琛屽鐞? * 綾諱技浜庢搷浣滅郴緇燂紝鎴戜滑鐨勭▼搴忎篃鍙互鍒嗕負kernel 鍜?
user 涓ゅ眰錛?瀵逛簬kernel緇濆涓嶈兘鍑虹幇閿欒錛?瀵逛簬user鍙互鍑虹幇閿欒錛岃繘琛屾仮澶? *
process欏跺眰loop娑夊強鐨勪唬鐮佸強鍑芥暟錛屾渶濂藉湪涓涓猰odule涓疄鐜? * process 鐨剅egister
name鍜宮odule鍚嶇О涓鑷達紝 渚夸簬瀵繪壘浠g爜 * 姣忎釜process鍏鋒湁涓涓崟涓鐨勮鑹詫紝姣斿錛歴upervisor 鐢ㄦ潵榪涜閿欒鎭㈠錛?
work 宸ヤ綔鑰咃紝鍙互鍑虹幇閿欒錛?trusted worker 涓嶄細鍑虹幇閿欒 *
閫氳繃鍑芥暟璋冪敤鍙互瀹炵幇鐨勫姛鑳斤紝灝變笉瑕佷嬌鐢╯ever瀹炵幇錛堝gen_server, 鍙婄被浼肩殑loop 瀹炵幇錛? *
緇欐秷鎭姞涓涓猼ag錛屽湪鍙戠敓閿欒鐨勬椂鍊欙紝鍙互瀹氫綅鍒版秷鎭紝鍚屾椂涔熸湁鍒╀簬紼嬪簭鐨勭ǔ鍋? *
鍦ㄦ秷鎭驚鐜腑錛屽浜巙nknown鐨勬秷鎭紝璇瘋皟鐢╨ib:flush_receive/0 灝嗗叾娓呴櫎錛屽噺杞籶rocess msg queue鐨勯暱搴? *
server涓繪槸涔﹀啓灝鵑掑綊鐨勫驚鐜? * 灝介噺浣跨敤record錛?鑰屼笉鏄師濮嬬殑tuple鏉ヨ〃鐜版暟鎹粨鏋勶紝 鍦ㄤ嬌鐢╮ecord鏃訛紝浣跨敤select
match錛? #person{name = Name, age = Age} = Person *
瀵逛簬榪斿洖鍊鹼紝鏈濂戒篃娣誨姞涓涓猼ag錛岀敤鏉ヨ鏄庤繑鍥炲肩被鍨嬶紝鎴栬呮墽琛屾垚鍔熶笌鍚? * 灝藉彲鑳藉皯鐨勪嬌鐢╟atch鍜宼ry錛屽湪erlang 紼嬪簭涓紝涓嶆帹鑽愪富鍔ㄦ崟鑾峰紓甯搞傚彧鏈夊綋鎴戜滑鐨勯昏緫鐗瑰埆澶嶆潅錛屾垜浠彲浠ヤ嬌鐢╰hrow鏉ヨ繑鍥炴暟鎹紝浣跨敤catch鏉ヨ幏鍙栬繑鍥炲箋?
* 褰撶劧紼嬪簭涓庡鐣屼氦浜掞紝澶栫晫鏁版嵁涓嶅彲闈犳椂錛岄渶瑕佷嬌鐢╟atch鍜宼ry * 鎱庨噸浣跨敤process dictory錛?
褰撲綘浣跨敤get/1, put/1鏃訛紝浣犵殑搴旂敤浼氬叿鏈夊緢澶х殑slide effect銆傚彲浠ラ氳繃鍔犲叆涓涓柊鐨勫弬鏁版潵淇濆瓨鍘熸湰闇瑕佸瓨鍌ㄥ埌process
dictory涓暟鎹? * 濡傛灉涓嶆兂浣胯嚜宸辯硦娑傦紝璇蜂笉瑕佷嬌鐢╥mport *
浣跨敤export鏃訛紝灝嗗姛鑳界被浼肩殑鎺ュ彛緇勫悎鍦ㄤ竴璧鳳紝騫舵坊鍔犲悎鐞嗙殑娉ㄨ錛岃繖鏍蜂綘鐨勬帴鍙f洿娓呮櫚錛屽埆浜轟嬌鐢ㄨ搗鏉ユ洿鏂逛究 * 涓嶈涔﹀啓宓屽澶繁鐨勪唬鐮?
* 涓嶈涔﹀啓澶暱鐨刴odule * 涓嶈涔﹀啓澶暱鐨勫嚱鏁? * 姣忚浠g爜涓嶈兘澶暱 * 閬垮厤浣跨敤
"_" 鍖垮悕鍙橀噺錛岃涓烘瘡涓彉閲忛夋嫨鏈夋剰涔夌殑鍚嶇О錛屽澶熸煇涓彉閲忔殏鏃朵笉浣跨敤錛岃浠ヤ笅鍒掔嚎 "_" 寮濮? * {error, enfile } enfile error in socket
鏄互涓哄唴linux緋葷粺涓?ulimit 闄愬埗錛?鍦╮oot涓嬩慨鏀癸細ulimit -n 25000 * {error, enotconn}
琛ㄧずsocket宸茬粡鍏抽棴 * 鍦?span class="hilite1">erlang寮鍙戞椂錛屾厧閲嶄嬌鐢╩acro錛屽洜涓?span class="hilite1">erlang鐨剆ingle
assign鐨勭紭鏁咃紝鍚屾椂璋冪敤鏌愪釜marco錛岃宮acro鍙堝畾涔変簡鏌愪釜鍙橀噺錛屽彲鑳藉鑷碽admatch閿欒銆? 姣斿錛?
-define(ADDLINEINFO1(F), ( begin Str1 =
lists:concat(["[Mod:", ?MODULE, " Line:", ?LINE, "]"]), Str1 ++ F
end )). -define(WARN(Log, F, D), log4erl:warn(Log,
?ADDLINEINFO(F), D)). 濡傛灉榪炵畫浣跨敤 WARN, 浼氬嚭鐜版閿欒 * erlang 涓彲浠ュ畾涔夊緢澶氱幆澧冨彉閲忥細 ERL_MAX_ETS_TABLES 璁劇疆鏈澶х殑ets鏁扮洰 榛樿1400
ERL_MAX_PORTS erlang 鏈澶х殑port鏁扮洰 榛樿1024 *
.app鏂囦歡涓殑start_phases錛?閫夐」鏃㈠彲浠ョ敤鏉ヤ綔涓篿nclude
applications涔嬮棿鐨勫悓姝ュ惎鍔紝涔熷彲浠ョ敤鏉ュ鍗曚釜application榪涜鍒嗗竷鍚姩銆? 欏哄簭濡備笅 鍖呭惈included app:
application:start(prim_app) => prim_app_cb:start(normal, [])
=> prim_app_cb:start_phase(init, normal, []) =>
prim_app_cb:start_phase(go, normal, []) => incl_app_cb:start_phase(go,
normal, []) ok 鏃爄ncluded app: application:start(prim_app)
=> prim_app_cb:start(normal, []) => prim_app_cb:start_phase(init,
normal, []) => prim_app_cb:start_phase(go, normal, []) ok *
浠諱綍鏃跺欙紝閮借閲嶈鍑芥暟鐨勮繑鍥炲鹼紝閫氳繃match紜繚鎮(zhèn)ㄧ殑棰勬湡錛屽鏋滃彂鐢熼敊璇紝閭d箞灝卞ぇ鑳嗙殑琛ㄨ揪鍑烘潵銆? ]]> 鍦∕acOSX涓婃祴璇昅ochiweb閬囧埌鐨勪竴浜涢棶棰?/title> http://m.shnenglu.com/keigoliye/archive/2009/09/24/97081.html鏆楀鏁欑埗 鏆楀鏁欑埗 Wed, 23 Sep 2009 16:59:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/24/97081.html http://m.shnenglu.com/keigoliye/comments/97081.html http://m.shnenglu.com/keigoliye/archive/2009/09/24/97081.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/97081.html http://m.shnenglu.com/keigoliye/services/trackbacks/97081.html A Million-user Comet Application with Mochiweb, Part 1
鍦∕acOSX騫沖彴涓婇亣鍒扮殑涓浜涢棶棰橈細 涓. IPv6瀵艱嚧鐨勯棶棰?
鍦∕acOS涓嬫祴璇曟椂鎶ラ敊econnrefused錛宮ochi-urls.txt鏂囦歡鐨剈rl涓嶈兘鐢╨ocalhost錛屽緱鐢?27.0.0.1鎵嶈
鍦‥rlang鐨勯偖浠跺垪琛ㄤ腑鎵懼埌浜嗚В閲婏細 We have seen the same issue with CouchDB. What
we found out is that in our case localhost was not only resolving to
127.0.0.1 (IPv4) but also ::1 (IPv6) and that http:request() would try to
connect to ::1 where no service was listening.
Erlang鐨刪ttp妯″潡緙虹渷鏄墦寮IPv6妯″紡鐨勶紝褰撴祴璇曠▼搴忛氳繃http妯″潡榪炴帴localhost鏃訛紝榪炴帴鐨勫湴鍧鏄疘Pv6鐨?:1鍦板潃錛屼絾鏄痬ochi娌℃湁鍦ㄦ鐩戝惉錛屾墍浠ヨ繛鎺ュ嚭閿?
{error,econnrefused} 瑙e喅鏂規(guī)硶涓ょ錛? 1. 灝唌ochi-urls.txt涓殑鍦板潃閮芥敼鎴?27.0.0.1
2.
鍦╤ttp:request(…)榪愯涔嬪墠璋冪敤http:set_options([{ipv6,disabled}])錛屽叧闂祴璇曠▼搴忕殑IPv6妯″紡錛屼嬌鐢↖Pv4妯″紡
鐞嗚涓婅繕鏈変竴縐嶆柟娉曪細璁﹎ochi鏈嶅姟鍣ㄥ紑鍚疘Pv6妯″紡鐩戝惉錛岃繖涓垜涓嶇煡閬撹繖涔堝紑錛? 鍙傝? You should teach
Yaws to listen also on IPv6 - “localhost” resolves not only to IPv4
127.0.0.1, but also to IPv6 ::1. 浜? 榪涚▼鑳芥墦寮鐨勬枃浠舵弿榪扮鏁伴噺鐨勯檺鍒?
MacOSX涓嬬己鐪佽兘鍚屾椂鎵撳紑鐨勬枃浠舵弿榪扮鏈澶ф暟鏄?56涓紝浣跨敤 ulimit -a鍛戒護鏌ョ湅 $ ulimit -a core file
size (blocks, -c) 0 data seg size (kbytes, -d) 6144
file size (blocks, -f) unlimited max locked memory
(kbytes, -l) unlimited max memory size (kbytes, -m) unlimited
open files (-n) 256 pipe
size (512 bytes, -p) 1 stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited max user
processes (-u) 266 virtual memory (kbytes, -v)
unlimited 浣跨敤ulimit -n XXXX璁劇疆錛屼絾鏈澶ф暟閲忚繕鏄笉鑳借秴榪?0240 鏌ョ湅鍐呮牳姣忚繘紼嬫渶澶ф枃浠舵暟錛? $
sysctl kern.maxfiles kern.maxfilesperproc kern.maxfiles: 12288
kern.maxfilesperproc: 10240 澧炲ぇ姣忚繘紼嬫渶澶ф枃浠舵暟錛? $ sudo sysctl -w
kern.maxfilesperproc=20480 kern.maxfiles=22528 鐒跺悗璁劇疆 $ ulimit -n
20480 娉ㄦ剰ulimit鍙湪姣忎釜shell紿楀彛鐢熷懡鍛ㄦ湡鍐呮湁鏁堬紝褰撴柊寮涓涓猻hell鍚庯紝寰楀啀嬈¤緗? sysctl鍋氱殑淇敼娌℃湁榪欎釜闂
涓夈佽皟鑺侷P绔彛鍙瘋寖鍥達紝涓嶇劧鏈澶氬彧鑳芥湁15K涓繛鎺? 緙虹渷鍔ㄦ佺鍙e彿浠?9152寮濮嬶紝鏀規(guī)垚2000鍚庢渶澶氬彲浠ユ湁63K涓繛鎺?
sysctl -w net.inet.ip.portrange.hifirst=2000
net.inet.ip.portrange.first=2000 ]]> ubuntu涓嬬紪璇戝畨瑁匛rlang http://m.shnenglu.com/keigoliye/archive/2009/09/18/96660.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 18 Sep 2009 11:12:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/18/96660.html http://m.shnenglu.com/keigoliye/comments/96660.html http://m.shnenglu.com/keigoliye/archive/2009/09/18/96660.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/96660.html http://m.shnenglu.com/keigoliye/services/trackbacks/96660.html 鍏堣榪欐牱 apt-get install build-essential apt-get install libncurses5-dev apt-get install m4 apt-get install libssl-dev
鐒跺悗瑕佺敤鏂扮珛寰楄濡備笅搴擄細 libc6 unixodbc unixodbc-dev gcj
freeglut3-dev libwxgtk2.8-dev g++
鐒跺悗涓嬭澆婧愪唬鐮? tar -xvf otp-src-R12B-0.tar.gz cd otp-src-R12B-0 sudo ./configure --prefix=/otp/erlang sudo make sudo make install
瀹夎瀹屾瘯錛屽彲浠m -fr opt-src-R12B-0鍒犻櫎婧愪唬鐮?
鐒跺悗鏀規(guī)敼/etc/profile export PATH=/opt/erlang/bin:$PATH alias ls='ls -color=auto' alias ll='ll -lht'
鍙互source /etc/profile涓涓嬶紝鍙婃椂淇敼PATH
]]>Erlang涓嶢ctionScript3閲囩敤JSON鏍煎紡榪涜Socket閫氳 http://m.shnenglu.com/keigoliye/archive/2009/09/18/96649.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 18 Sep 2009 08:07:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/18/96649.html http://m.shnenglu.com/keigoliye/comments/96649.html http://m.shnenglu.com/keigoliye/archive/2009/09/18/96649.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/96649.html http://m.shnenglu.com/keigoliye/services/trackbacks/96649.html 闇瑕佷笅杞?a target=_blank>as3corelib 鏉ヤ負ActionScript3澶勭悊JSON codec server.erl
- module(server). - export([start / 0 ,start / 1 ,process / 1 ]). - define(defPort, 8888 ). start() -> start( ? defPort). start(Port) -> case gen_tcp:listen(Port, [binary, {packet, 0 }, {active, false }]) of {ok, LSock} -> server_loop(LSock); {error, Reason} -> exit({Port,Reason}) end. %% main server loop - wait for next connection, spawn child to process it server_loop(LSock) -> case gen_tcp:accept(LSock) of {ok, Sock} -> spawn( ? MODULE,process,[Sock]), server_loop(LSock); {error, Reason} -> exit({accept,Reason}) end. %% process current connection process(Sock) -> Req = do_recv(Sock), io:format( " ~p~n " , [Req]), {ok, D, []} = rfc4627:decode(Req), {obj, [{ " name " , _Name}, { " age " , Age}]} = D, Name = binary_to_list(_Name), io:format( " Name: ~p, Age: ~p~n " , [Name, Age]), Resp = rfc4627:encode({obj, [{ " name " , ' Hideto2 ' }, { " age " , 24 }]}), do_send(Sock,Resp), gen_tcp:close(Sock). %% send a line of text to the socket do_send(Sock,Msg) -> case gen_tcp:send(Sock, Msg) of ok -> ok; {error, Reason} -> exit(Reason) end. %% receive data from the socket do_recv(Sock) -> case gen_tcp:recv(Sock, 0 ) of {ok, Bin} -> binary_to_list(Bin); {error, closed} -> exit(closed); {error, Reason} -> exit(Reason) end.
Person.as
package { public class Person { public var name:String; public var age: int ; public function Person() { } } }
Client.as
package { import com.adobe.serialization.json.JSON; import flash.display.Sprite; import flash.events. * ; import flash.net.Socket; import flash.text. * ; public class Client extends Sprite { private var socket:Socket; private var myField:TextField; private var send_data:Person; public function Client() { socket = new Socket(); myField = new TextField(); send_data = new Person(); send_data.name = " Hideto " ; send_data.age = 23 ; socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); socket.connect( " localhost " , 8888 ); socket.writeUTFBytes(JSON.encode(send_data)); socket.flush(); myField.x = 20 ; myField.y = 30 ; myField.text = " test " ; myField.autoSize = TextFieldAutoSize.LEFT; addChild(myField); } private function onSocketData(event:ProgressEvent): void { while (socket.bytesAvailable) { var recv_data: * = JSON.decode(socket.readUTFBytes(socket.bytesAvailable)); myField.text = " Name: " + recv_data.name + " , age: " + recv_data.age.toString(); } } } }
榪愯Erlang鏈嶅姟鍣ㄧ錛?br>
Eshell > c(server). Eshell > server:start(). " {\ " name\ " :\ " Hideto\ " ,\ " age\ " :23} " Name: " Hideto " , Age: 23
榪欓噷鎵撳嵃鍑轟簡Erlang Socket Server鎺ユ敹鍒扮殑AS3 Client鍙戣繃鏉ョ殑JSON decode榪囩殑涓涓猵erson瀵硅薄 榪愯AS3瀹㈡埛绔細 client.html涓婇鍏堟樉紺?#8220;test”錛岀劧鍚庡紓姝ュ鐞嗗畬Socket娑堟伅鍙戦佸拰鎺ュ彈鍚庯紝decode Erlang Server绔彂榪囨潵鐨刾erson瀵硅薄錛屽皢欏甸潰涓婄殑TextField鏇挎崲涓?#8220;Name: Hideto2, age: 24”
]]> Erlang鐨凧SON搴?/title> http://m.shnenglu.com/keigoliye/archive/2009/09/18/96647.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 18 Sep 2009 07:38:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/18/96647.html http://m.shnenglu.com/keigoliye/comments/96647.html http://m.shnenglu.com/keigoliye/archive/2009/09/18/96647.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/96647.html http://m.shnenglu.com/keigoliye/services/trackbacks/96647.html http://www.lshift.net/blog/2007/02/17/json-and-json-rpc-for-erlang 璇SON搴撻噰鐢?a target=_blank>Joe Armstrong prefered Data type mapping 鍗籌細
JSON Obj = type obj() = {obj, [ {key(), val()} ]} JSON Array = type array() = [val()] JSON Number = type num() = int () | float () JSON String = type str() = bin() JSON true false null = true , false null (atoms) With Type val() = obj() | array() | num() | str() | true | false | null and key() being a str(). (Or a binary or atom, during JSON encoding.)
嫻嬭瘯濡備笅錛?
Eshell V5. 6.3 (abort with ^ G) 1 > O = rfc4627:encode( {obj, [ {name, hideto} , {age, 23 } ]} ). " {\ " name\ " :\ " hideto\ " ,\ " age\ " :23} " 2 > rfc4627:decode(O). {ok, {obj,[ { " name " , << " hideto " >> } , { " age " , 23 } ]} ,[]} 3 > A = rfc4627:encode([ 1 , 2 , 3 , 4 , 5 ]). " [1,2,3,4,5] " 4 > rfc4627:decode(A). {ok,[ 1 , 2 , 3 , 4 , 5 ],[]} 5 > N = rfc4627:encode( 12345 ). " 12345 " 6 > rfc4627:decode(N). {ok, 12345 ,[]} 7 > S = rfc4627:encode( " 12345 " ). " [49,50,51,52,53] " 8 > rfc4627:decode(S). {ok, " 12345 " ,[]} 9 > T = rfc4627:encode( true ). " true " 10 > rfc4627:decode(T). {ok, true ,[]} 11 > F = rfc4627:encode( false ). " false " 12 > rfc4627:decode(F). {ok, false ,[]} 13 > Null = rfc4627:encode( null ). " null " 14 > rfc4627:decode(Null). {ok, null ,[]}
]]> Flash Socket 鍜?Erlang Socket 閫氫俊鐨勬敞鎰忎簨欏?/title> http://m.shnenglu.com/keigoliye/archive/2009/09/18/96634.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 18 Sep 2009 04:40:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/18/96634.html http://m.shnenglu.com/keigoliye/comments/96634.html http://m.shnenglu.com/keigoliye/archive/2009/09/18/96634.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/96634.html http://m.shnenglu.com/keigoliye/services/trackbacks/96634.html 杞嚜http://www.javaeye.com/topic/401041 瀛rlang鏈変竴孌墊椂闂翠簡錛岀幇鍦ㄥ湪緇存姢涓濂梬ebim緋葷粺 騫舵墦綆楁墿灞曟垚 webgame 鐨勬湇鍔$▼搴?/p>
鍦ㄦ病鏈変嬌鐢ㄥ寘鍗忚鐨勬椂鍊欙紝閬囧埌濂藉綺樺寘闂錛屽疄鍦ㄦ伡鐏?/p>
鏌ラ槄浜嗙浉鍏寵祫鏂欙細
Flash Socket 鐨?writeUTF() 浼氳嚜鍔ㄥ鍔犲寘澶撮暱搴︾殑鍗忚錛屽垰濂藉搴斾簡 Erlang鐨凷ocket閫夐」 {packet,2} 榪欎嬌寰椾袱鑰呯殑閫氫俊闈炲父瀹岀編錛屽啀涔熶笉鐢ㄦ媴蹇冪矘鍖呬粈涔堢殑闂浜?/p>
涓嬮潰鏄垜鍐欑殑涓涓狥lash Socket 鎺ュ彛錛歋ocketBridge.as
package { import flash.display.Sprite; import flash.events. * ; import flash.net.Socket; import flash.utils. * ; import flash.external.ExternalInterface; import flash.system. * ; public class SocketBridge extends Sprite { Socket.prototype.timeout = 3000 ; private var socket:Socket; public function SocketBridge() { socket = new Socket(); socket.addEventListener( Event.CONNECT, onConnect ); socket.addEventListener( ProgressEvent.SOCKET_DATA, onDataRecevice); socket.addEventListener( Event.CLOSE, onClose); socket.addEventListener( IOErrorEvent.IO_ERROR, onError); if (ExternalInterface.available) { ExternalInterface.addCallback( " socket_connect " ,socket_connect); ExternalInterface.addCallback( " socket_send " ,socket_send); ExternalInterface.addCallback( " load_policy " ,load_policy); } } public function onError(e): void { ExternalInterface.call( " sb_onerror " ,e.text); socket.close(); } public function load_policy(host:String,port): void { Security.loadPolicyFile( " xmlsocket:// " + host + " : " + port); } public function socket_connect(host:String,port): void { try { socket.connect(host,port); } catch (e) { ExternalInterface.call( " sb_onerror " ,e.text); } } public function socket_send(msg:String) { socket.writeUTF(msg); socket.flush(); } private function onConnect(event:Event): void { ExternalInterface.call( " sb_onconnect " , true ); } private function onClose(event:Event): void { socket.close(); ExternalInterface.call( " sb_onclose " , true ); } private function onDataRecevice( eventrogressEvent ): void { var sdata:String; while (socket.bytesAvailable) { sdata = socket.readUTF(); ExternalInterface.call( " sb_ondata " ,sdata); } } } }
]]> erlang緗戠粶緙栫▼鐨勫嚑涓ц兘璋冧紭鍜屾敞鎰忕偣 http://m.shnenglu.com/keigoliye/archive/2009/09/14/96106.html鏆楀鏁欑埗 鏆楀鏁欑埗 Mon, 14 Sep 2009 04:25:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/14/96106.html http://m.shnenglu.com/keigoliye/comments/96106.html http://m.shnenglu.com/keigoliye/archive/2009/09/14/96106.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/96106.html http://m.shnenglu.com/keigoliye/services/trackbacks/96106.html 鍓嶄簺澶╃粰echo_server鍐欎簡涓潪甯哥畝鍗曠殑榪炴帴鍘嬪姏嫻嬭瘯紼嬪簭,
1 . - module(stress_test). 2 . 3 . - export([start / 0 , tests / 1 ]). 4 . 5 . start() -> 6 . tests( 12345 ). 7 . 8 . tests(Port) -> 9 . io:format( " starting~n " ), 10 . spawn(fun() -> test(Port) end), 11 . spawn(fun() -> test(Port) end), 12 . spawn(fun() -> test(Port) end), 13 . spawn(fun() -> test(Port) end). 14 . 15 . test(Port) -> 16 . case gen_tcp:connect( " 192.168.0.217 " , Port, [binary,{packet, 0 }]) of 17 . {ok, _} -> 18 . test(Port); 19 . _ -> 20 . test(Port) 21 . end.
涓寮濮嬫垜鐨勮繖涓猻tress_test瀹㈡埛绔繍琛屽湪windows涓婇潰, echo_server鏈嶅姟鍣ㄧ榪愯鍦╨inux涓婇潰銆?
緇撴灉鎺ュ彈浜?016涓繛鎺ュ氨鍋滄浜? 浜庢槸鎴戠敤ulimit -n 鏀逛簡鏈嶅姟鍣ㄧ鐨勬枃浠舵弿榪扮鏁伴噺涓?0240.
鎺ョ潃榪樻槸濡傛,鎶樿吘浜嗗嚑澶?鏈緇堣繕鏄病鏈夋悶鏄庣櫧銆?
浜庢槸灝辨眰鍔╀簬鍏徃鐨刲inux緙栫▼鐗涗漢,緇撴灉璁╂垜涓鍊?.. 瀹㈡埛绔病鏈変慨鏀規(guī)枃浠舵弿榪扮涓暟. windows涓婂緱鍦ㄦ敞鍐岃〃閲岄潰鏀?
鐗涗漢寮濮嬪榪欎笢瑗跨殑鎬ц兘鎰熷叴瓚d簡,鍒氬ソ鎴戞懜浜嗕竴闃靛瓙erlang鐨勬枃妗?浜庢槸鎴戜咯灝辮蛋鍚戜簡erlang緗戠粶榪炴帴鐨勬ц兘璋冧紭涔嬫梾鍟~榪囩▼鐪熸槸璁╀漢鍏村銆?鎴戜滑寰堝揩閫氳繃浜?024榪欎竴鍏硚~鍒頒簡4999涓繛鎺?寰堝叴濂?
浣嗕負浠涔?999涓繛鎺ュ憿, 媯鏌ヤ竴涓嬩唬鐮佺粓浜庡彂鐜癳cho_server.erl瀹氫箟浜嗕竴涓畯, 鏈澶ц繛鎺ユ暟涓?000. 鎴戝張鍊拁~
淇敼緙栬瘧涔嬪悗, 榪炴帴鏁拌窇鍒?01xx澶氫簡, 澶搱鐨簡!
鍐嶆祴102400涓繛鎺ユ椂,鍒?2767涓繛鎺ユ暟erl鎸備簡~璇存槸榪涚▼寮寰楀お澶氫簡. 濂藉湪璁板緱榪欎釜erl鐨勫弬鏁?P,鍙互瀹氫箟erlang鑳界敓鎴愮殑榪涚▼鏁? 榛樿鏄?2768. 鏀逛簡!
鍚庨潰涓嶇煡鎬庝箞鐫,鍦?1231涓繛鎺ュ仠姝簡. 鏂扮殑鎬ц兘鐡墮鍙堝崱浜嗘垜浠? 濂藉湪鐗涗漢瀵筶inux鐔? 鐢╯trace(榪欎笢瑗夸細鑾悕鍦伴鍑?,
stap鏌ュ嚭涓浜涜嫍澶?
鎴戜篃鎯沖埌鍦╫tp鏂囨。濂藉儚鎻愯繃鍙︿竴涓猯imit,閭e氨鏄鍙f暟...鍦ㄦ鍚屾椂鎴戜滑鍙戠幇erlang鍦╨inux涓婃槸鐢ㄧ殑浼犵粺poll妯″瀷.
浣嗘煡erlang鐨勬簮浠g爜鍙戠幇鏄敮鎸乪poll鐨? 鍦ㄧ綉涓婃悳浜嗗崐澶?緇堜簬鎼滃埌浜嗕釜maillist鐨勫笘瀛?
浠g爜
$./configure --enable-kernel-poll
鐢變簬鎴戜滑鐨勬祴璇曟湇鍔″櫒鏄弻鏍哥殑,鎴戜滑鍦ㄩ厤緗殑鏃跺欎篃鎵撳紑浜唖mp鏀寔. 嬈㈠揩鐨刴ake & make install涔嬪悗....
鎶?/proc/sys/net/ipv4/ip_local_port_range 鐨勫唴瀹規(guī)敼鎴愪簡1024鍒?5535. 鏈澶氫篃涔熻兘鏀規(guī)垚65535 :)
浠g爜
$echo 1024 65535 > ip_local_port_range
鍙﹀鍐嶆坊鍔犱竴涓猠rl鐨勭幆澧冨彉閲?br>
浠g爜
$export ERL_MAX_PORTS= 102400
浜庢槸寮濮嬭窇浜?涓嶈繃榪欐璺戜笉涓鏍蜂簡
echo_server
$erl -noshell +P 102400 +K true +S 2 -smp -s echo_server start
stress_test
$erl -noshell +P 102400 +K true +S 2 -smp -s stress_test start
榪欓噷鐨?K true,琛ㄧず浣跨敤鍐呮牳poll,+S 2 琛ㄧず涓や釜鏍? 榪欐牱鍙蹇暒~~~ 10w澶у叧榪囧挴! 鑰屼笖姣斿垰鎵嶆病鐢╡poll鐨勯熷害蹇毚澶殈~
浜庢槸鎴戜滑鍙堝紑濮嬩簡204800涓繛鎺ュ彂嫻嬭瘯浜唦~~
鐢╰op涓鐪媍pu鍗犵敤鐜囨瀬浣?鏈嶅姟鍣ㄥ彧鍦?%宸﹀彸銆?鍐呭瓨涔熶笉鏄緢澶~
]]>echo_server http://m.shnenglu.com/keigoliye/archive/2009/09/14/96105.html鏆楀鏁欑埗 鏆楀鏁欑埗 Mon, 14 Sep 2009 04:24:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/14/96105.html http://m.shnenglu.com/keigoliye/comments/96105.html http://m.shnenglu.com/keigoliye/archive/2009/09/14/96105.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/96105.html http://m.shnenglu.com/keigoliye/services/trackbacks/96105.html
1 . - module(echo_server). 2 . - export([start / 0 ,stop / 0 ]). 3 . 4 . - define(LISTEN_PORT, 12345 ). % 寮鏀劇鍙?nbsp; 5 . - define(MAX_CONN, 5000 ). % 鏈澶ц繛鎺ユ暟 6 . 7 . start() -> 8 . process_flag(trap_exit, true ), % 璁劇疆閫鍑洪櫡闃?nbsp; 9 . tcp_server:start_raw_server( ? LISTEN_PORT, 10 . fun(Socket) -> socket_handler(Socket,self()) end, 11 . ? MAX_CONN, 12 . 0 ). 13 . 14 . %% 澶勭悊鏁版嵁 15 . socket_handler(Socket,Controller) -> 16 . receive 17 . {tcp, Socket, Bin} -> 18 . gen_tcp:send(Socket, Bin); % echo 19 . {tcp_closed, Socket} -> 20 . ok; 21 . _ -> 22 . socket_handler(Socket,Controller) 23 . end. 24 . 25 . stop() -> 26 . tcp_server:stop( ? LISTEN_PORT).
鍩轟簬Joe Armstrong 鐨則cp_server妯″潡鏉ュ仛鐨? 璇曡瘯鍏?:)
緙栬瘧
erl -noshell -s make all -s init stop
榪愯
erl -noshell -sname coderplay -s echo_server start
]]> erlang 緗戠粶璋冧紭瀹炴垬 http://m.shnenglu.com/keigoliye/archive/2009/09/14/96096.html鏆楀鏁欑埗 鏆楀鏁欑埗 Mon, 14 Sep 2009 03:20:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/14/96096.html http://m.shnenglu.com/keigoliye/comments/96096.html http://m.shnenglu.com/keigoliye/archive/2009/09/14/96096.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/96096.html http://m.shnenglu.com/keigoliye/services/trackbacks/96096.html erlang 緗戠粶 緙栫▼ 鐨勫嚑涓ц兘璋冧紭 鍜屾敞鎰忕偣
鍘熸枃浣滆咃細coderplay
鍓嶄簺澶╃粰echo_server鍐欎簡涓潪甯哥畝鍗曠殑榪炴帴鍘嬪姏嫻嬭瘯紼嬪簭,
涓嬭澆 : stress_test.erl
- module ( stress_test ) .
- export ([ start / 0 , tests / 1 ]) .
start () ->
tests ( 12345 ) .
tests ( Port ) ->
io : format ( " starting~n " ) ,
spawn ( fun () -> test ( Port )
end ) ,
spawn ( fun () -> test ( Port )
end ) ,
spawn ( fun () -> test ( Port )
end ) ,
spawn ( fun () -> test ( Port )
end ) .
test ( Port ) ->
case
gen_tcp : connect ( " 192.168.0.217 " , Port , [ binary ,{ packet , 0 } ])
of
{ ok , _ } ->
test ( Port ) ;
_ ->
test ( Port )
end .
涓寮濮嬫垜鐨勮繖涓猻tress_test瀹㈡埛绔繍琛屽湪windows 涓婇潰,echo_server鏈嶅姟鍣ㄧ榪愯鍦╨inux涓婇潰銆傜粨鏋滄帴鍙椾簡1016涓繛鎺ュ氨鍋滄浜? 浜庢槸鎴戠敤ulimit -n鏀逛簡鏈嶅姟鍣ㄧ鐨?span onclick="tagshow(event)" class="t_tag">鏂囦歡鎻忚堪絎︽暟閲忎負10240. 鎺ョ潃榪樻槸濡傛,鎶樿吘浜嗗嚑澶?鏈緇堣繕鏄病鏈夋悶鏄庣櫧銆?br>
浜庢槸灝辨眰鍔╀簬鍏徃鐨刲inux緙栫▼鐗涗漢,緇撴灉璁╂垜涓鍊?#8230; 瀹㈡埛绔病鏈変慨鏀規(guī)枃浠舵弿榪扮涓暟. windows涓婂緱鍦ㄦ敞鍐岃〃閲岄潰鏀?
鐗涗漢寮濮嬪榪欎笢瑗跨殑鎬ц兘鎰熷叴瓚d簡,鍒氬ソ鎴戞懜浜嗕竴闃靛瓙erlang鐨?span onclick="tagshow(event)" class="t_tag">鏂囨。,浜庢槸鎴戜咯灝辮蛋鍚戜簡erlang緗戠粶榪炴帴鐨勬ц兘璋冧紭涔嬫梾鍟~榪囩▼鐪熸槸璁╀漢鍏村銆?鎴戜滑寰堝揩閫氳繃浜?024榪欎竴鍏硚~鍒頒簡4999涓繛鎺?寰堝叴濂?
浣嗕負浠涔?999涓繛鎺ュ憿, 媯鏌ヤ竴涓嬩唬鐮佺粓浜庡彂鐜癳cho_server.erl瀹氫箟浜嗕竴涓畯, 鏈澶ц繛鎺ユ暟涓?000. 鎴戝張鍊拁~
淇敼緙栬瘧 涔嬪悗, 榪炴帴鏁拌窇鍒?01xx澶氫簡, 澶搱鐨簡!
鍐嶆祴102400涓繛鎺ユ椂,鍒?2767涓繛鎺ユ暟erl鎸備簡~璇存槸榪涚▼ 寮寰楀お澶氫簡. 濂藉湪璁板緱榪欎釜erl鐨勫弬鏁?P,鍙互瀹氫箟erlang鑳界敓鎴愮殑榪涚▼鏁? 榛樿鏄?2768. 鏀逛簡!
鍚庨潰涓嶇煡鎬庝箞鐫,鍦?1231涓繛鎺ュ仠姝簡. 鏂扮殑鎬ц兘鐡墮鍙堝崱浜嗘垜浠? 濂藉湪鐗涗漢瀵筶inux鐔?
鐢╯trace(榪欎笢瑗夸細鑾悕鍦伴鍑?,stap鏌ュ嚭涓浜涜嫍澶?鎴戜篃鎯沖埌鍦╫tp鏂囨。濂藉儚鎻愯繃鍙︿竴涓猯imit,閭e氨鏄鍙f暟…鍦ㄦ鍚屾椂鎴戜滑鍙戠幇
erlang鍦╨inux涓婃槸鐢ㄧ殑浼犵粺poll妯″瀷.浣嗘煡erlang鐨勬簮浠g爜鍙戠幇鏄敮鎸乪poll鐨?
鍦ㄧ綉涓婃悳浜嗗崐澶?緇堜簬鎼滃埌浜嗕釜maillist鐨勫笘瀛?
$./configure --enable-kernel-poll
鐢變簬鎴戜滑鐨勬祴璇曟湇鍔″櫒鏄弻鏍哥殑,鎴戜滑鍦ㄩ厤緗殑鏃跺欎篃鎵撳紑浜唖mp鏀寔. 嬈㈠揩鐨刴ake & make install涔嬪悗….
鎶?/proc/sys/net/ipv4/ip_local_port_range 鐨勫唴瀹規(guī)敼鎴愪簡1024鍒?5535. 鏈澶氫篃涔熻兘鏀規(guī)垚65535
$echo 1024 65535 > ip_local_port_range
鍙﹀鍐嶆坊鍔犱竴涓猠rl鐨勭幆澧?span onclick="tagshow(event)" class="t_tag">鍙橀噺
$export ERL_MAX_PORTS=102400
浜庢槸寮濮嬭窇浜?涓嶈繃榪欐璺戜笉涓鏍蜂簡
echo_server
$erl -noshell +P 102400 +K true +S 2 -smp -s echo_server start
stress_test
$erl -noshell +P 102400 +K true +S 2 -smp -s stress_test start
榪欓噷鐨?K true,琛ㄧず浣跨敤 鍐呮牳poll,+S 2 琛ㄧず涓や釜鏍? 榪欐牱鍙蹇暒~~~ 10w澶у叧榪囧挴! 鑰屼笖姣斿垰鎵嶆病鐢╡poll鐨勯熷害蹇毚澶殈~
浜庢槸鎴戜滑鍙堝紑濮嬩簡204800涓繛鎺ュ彂嫻嬭瘯浜唦~~
鐢╰op涓鐪媍pu鍗犵敤鐜囨瀬浣?鏈嶅姟鍣ㄥ彧鍦?%宸﹀彸銆傚唴瀛樹篃涓嶆槸寰堝ぇ~~ ]]>ErLang璇硶鎻愯 http://m.shnenglu.com/keigoliye/archive/2009/09/11/95894.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 11 Sep 2009 03:04:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/11/95894.html http://m.shnenglu.com/keigoliye/comments/95894.html http://m.shnenglu.com/keigoliye/archive/2009/09/11/95894.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/95894.html http://m.shnenglu.com/keigoliye/services/trackbacks/95894.html ErLang鐨勬敞閲婄敤%寮澶淬侲rLang鐢ㄤ笅鍒掔嚎“_”琛ㄧず浠繪剰鍙橀噺錛岀被浼間簬Java鐨剆witch璇硶閲岄潰鐨刣efault閫夐」銆? ErLang鑴辮儙浜嶱rolog錛屼笉榪囷紝鎴戣寰楋紝ErLang璇硶鍜孒askell璇硶姣旇緝璞★紝閮芥槸閲囩敤 -> 瀹氫箟鍑芥暟銆? ErLang璇彞涓殑鏍囩偣絎﹀彿鐢ㄦ硶寰堣薄鏂囩珷鐨勬爣鐐圭鍙楓? 鏁翠釜鍑芥暟瀹氫箟緇撴潫鐢ㄤ竴涓彞鍙?#8220;.”錛涘悓涓涓嚱鏁頒腑錛屽茍鍒楃殑閫昏緫鍒嗘敮涔嬮棿錛岀敤鍒嗗彿“;”鍒嗙晫錛涢『搴忚鍙ヤ箣闂達紝鐢ㄩ楀彿“,”鍒嗛殧銆? ErLang涓紝{ }涓嶆槸琛ㄧず紼嬪簭鍧楃殑寮澶村拰緇撳熬錛岃屾槸琛ㄧず涓縐嶇壒孌婄殑鏁版嵁緇撴瀯綾誨瀷鈥斺擳uple錛堝厓緇勶級錛屾瘮濡傦紝{12, 3, ok}銆傛垜浠彲浠ユ妸Tuple鐞嗚В涓哄畾闀挎暟緇勩? [ ] 鍒欒〃紺烘渶鍩烘湰鐨勫嚱鏁板紡緙栫▼鐨勬暟鎹粨鏋勭被鍨嬧斺擫ist銆侺ist鏁版嵁緇撴瀯寰堝熀鏈紝鍐欐硶鍜岀敤娉曚篃鏈変竴瀹氱殑澶嶆潅搴︼紝涓嶆槸琛ㄩ潰涓婄湅璧鋒潵閭d箞綆鍗曪紝鍚庨潰璁茶ВClosure鐨勭珷鑺備細璇︾粏浠嬬粛List鐨勬渶鍩烘湰鐨勬瀯閫犲師鐞嗐? 涓嬮潰鎴戜滑鏉ョ湅涓涓畝鍗曠殑渚嬪瓙銆? 鎴戜滑棣栧厛瀹氫箟涓涓渶綆鍗曠殑鍑芥暟錛屾妸涓涓弬鏁頒箻浠?0錛岀劧鍚庡姞1銆? times10( Number ) –> Temp = 10 * Number, Temp + 1. 涓轟簡璇存槑闂錛屼笂闈㈢殑浠g爜鎶婁箻娉曟搷浣滃拰鍔犳硶鎿嶄綔鍒嗘垚涓や釜姝ラ銆俆emp = 10 * Number璇彞鍚庨潰鏄楀彿錛屽洜涓鴻繖鏄袱鏉¢『搴忔墽琛岀殑璇彞銆俆emp + 1璇彞鍚庨潰鏄彞鍙鳳紝琛ㄧず鏁翠釜鍑芥暟瀹氫箟緇撴潫銆傝屼笖錛屽彲浠ョ湅鍑猴紝ErLang娌℃湁return璇彞錛屾渶鍚庢墽琛岀殑閭f潯璇彞鐨勬墽琛岀粨鏋滃氨鏄繑鍥炲箋? 涓嬮潰錛屾垜浠妸榪欎釜鍑芥暟浼樺寲涓涓嬨傚綋鍙傛暟絳変簬0鐨勬椂鍊欙紝鐩存帴榪?錛涘惁鍒欙紝灝變箻浠?0錛岀劧鍚庡姞1錛岀劧鍚庤繑鍥炪傝繖鏃跺欙紝鎴戜滑灝辮鐢ㄥ埌case of閫昏緫鍒嗘敮璇彞錛岀浉褰撲簬java鐨剆witch璇彞銆? times10( Number ) –> case Number of 0 -> 1; _ -> Temp = 10 * Number, Temp + 1 end. 鎴戜滑鏉ヤ粩緇嗚瀵熻繖孌礒rLang紼嬪簭銆? 褰揘umber絳変簬0鐨勬椂鍊欙紝鐩存帴榪斿洖1銆傜敱浜庤繖鏄竴鏉″垎鏀鍙ワ紝鍜屽悗闈㈢殑鍒嗘敮鏄茍鍒楃殑鍏崇郴錛屾墍浠ワ紝1鐨勫悗闈㈢殑鏍囩偣絎﹀彿鏄垎鍙楓傚悗闈㈣繖涓垎鏀紝涓嬪垝綰?#8220;_”琛ㄧず浠諱綍鍏跺畠鍊鹼紝榪欓噷灝辮〃紺洪櫎浜?涔嬪鐨勪換浣曞叾瀹冩暟鍊箋? 闇瑕佹敞鎰忕殑涓鐐規(guī)槸錛宑ase of璇彞闇瑕佺敤end緇撳熬錛宔nd涔嬪墠涓嶉渶瑕佹湁鏍囩偣絎﹀彿銆? 涓婅堪浠g爜涓殑case of 璇彞錛屽叾瀹炲氨鏄疨attern Match鐨勪竴縐嶃侲rLang鐨凱attern Match寰堝己澶э紝鑳藉澶у箙搴︾畝鍖栫▼搴忛昏緫錛屽悗闈㈣繘琛屼笓闂ㄤ粙緇嶃? Pattern Match Pattern Match涓昏鏈変袱涓姛鑳解斺旀瘮杈冨垎媧懼拰鍙橀噺璧嬪箋? 鍏朵腑錛屾瘮杈冨垎媧炬槸鏈涓昏鐨勫姛鑳姐傛瘮杈冨垎媧劇殑鎰忔濇槸錛屾牴鎹弬鏁板艱繘琛屾潯浠跺垎鏀殑鍒嗘淳銆傚彲浠ユ妸姣旇緝鍒嗘淳鍔熻兘鐪嬩綔鏄竴縐嶇被浼間簬if, else絳夋潯浠跺垎鏀鍙ョ殑綆媧佸己澶у啓娉曘? 涓婇潰鐨勪緥瀛愪腑錛宑ase Number of 灝辨槸鏍規(guī)嵁Number鐨勫艱繘琛屾瘮杈冨垎媧俱傛洿甯歌鐨勫啓娉曟槸錛屽彲浠ユ妸Pattern Match閮ㄥ垎鎻愬埌鍑芥暟瀹氫箟鍒嗘敮鐨勯珮搴︺備簬鏄紝涓婅堪浠g爜鍙互鍐欐垚涓嬮潰鐨勫艦寮忥細 times10( 0 ) –> 1; times10( Number ) –> Temp = 10 * Number, Temp + 1. 榪欐浠g爜鐢變袱涓嚱鏁板畾涔夊垎鏀瀯鎴愶紝鐢變簬涓や釜鍑芥暟鍒嗘敮鐨勫嚱鏁板悕鐩稿悓錛岃屼笖鍙傛暟涓暟鐩稿悓錛岃屼笖涓や釜鍑芥暟瀹氫箟鍒嗘敮涔嬮棿閲囩敤鍒嗗彿“;”鍒嗛殧錛岃鏄庤繖鏄悓涓涓嚱鏁扮殑瀹氫箟銆傚嚱鏁板紡緙栫▼璇█涓紝榪欑瀹氫箟鏂瑰紡寰堝父瑙侊紝鐪嬭搗鏉ュ艦寮忓緢鏁撮綈錛屽疀濡傛暟瀛﹀叕寮忋? 榪欐浠g爜鐨勫惈涔夋槸錛屽綋鍙傛暟鍊肩瓑浜?鐨勬椂鍊欙紝閭d箞錛岀▼搴忚蛋絎竴涓嚱鏁板畾涔夊垎鏀紙鍗沖垎鍙?#8220;;”緇撳熬鐨?#8220;times10( 0 ) –> 1;”錛夛紝鍚﹀垯錛岃蛋涓嬮潰鐨勫嚱鏁板畾涔夊垎鏀紙鍗?#8220;times10( Number ) –>…”錛夈? 絎簩涓垎鏀腑鐨勫弬鏁頒笉鏄竴涓父鏁幫紝鑰屾槸涓涓彉閲廚umber錛岃〃紺鴻繖涓垎鏀彲浠ユ帴鍙椾換浣曢櫎浜?涔嬪鐨勫弬鏁板鹼紝姣斿錛?銆?銆?2絳夌瓑錛岃繖浜涘煎皢璧嬬粰鍙橀噺Number銆? 鍥犳錛岃繖涓湴鏂逛篃浣撶幇浜哖attern Match鐨勭浜屼釜鍔熻兘鈥斺斿彉閲忚祴鍊箋? Pattern Match鐨勫艦寮忓彲浠ュ緢澶嶆潅錛屼笅闈婦鍑犱釜鍏稿瀷鐨勪緥瀛愩? 錛?錛夋暟鎹粨鏋勬媶瑙h祴鍊? 鍓嶉潰灝嗗埌浜咵rLang璇█鏈変竴縐嶇浉褰撲簬瀹氶暱鏁扮粍鐨凾uple綾誨瀷錛屾垜浠彲浠ュ緢鏂逛究鍦版牴鎹厓绱犵殑浣嶇疆榪涜騫惰璧嬪箋傛瘮濡傦紝 {First, Second} = {1, 2} 鎴戜滑榪樺彲浠ュ澶嶅悎Tuple鏁版嵁緇撴瀯榪涜璧嬪鹼紝姣斿 {A, {B, C}, D} = { 1, {2, 3}, 4 } List鏁版嵁緇撴瀯鐨勮祴鍊間篃鏄被浼箋傜敱浜嶭ist鐨勫啓娉曞拰鐢ㄦ硶涓嶆槸閭d箞綆鍗曪紝涓夎█涓よ涔熻涓嶆竻妤氾紝榪樺緬澧炲洶鎵幫紝榪欓噷涓嶅啀璧樿堪銆? 錛?錛塧ssertEquals璇彞 鍦↗ava絳夎璦涓紝鎴戜滑鍐欏崟鍏冩祴璇曠殑鏃跺欙紝浼氬啓涓浜沘ssert璇彞錛岄獙璇佺▼搴忚繍琛岀粨鏋溿傝繖浜沘ssert璇彞閫氬父鏄互API鐨勬柟寮忔彁渚涳紝姣斿錛宎ssertTrue()銆乤ssertEquals()絳夈? 鍦‥rLang涓紝鍙互鐢ㄧ畝鍗曠殑璇彞杈懼埌綾諱技浜巃ssertTrue()銆乤ssertEquals()絳堿PI鐨勬晥鏋溿? 姣斿錛孍rLang涓紝true = testA() 榪欐牱鐨勮鍙ヨ〃紺簍estA鐨勮繑鍥炵粨鏋滃繀欏繪槸true錛屽惁鍒欏氨浼氭姏鍑哄紓甯搞傝繖涓敤娉曞緢宸у銆傝繖閲岃В閲婁竴涓嬨? 鍓嶉潰璁茶繃錛孍rLang璇硶綰﹀畾錛屽皬鍐欏瓧姣嶅紑澶寸殑鍚嶅瓧錛岄兘鏄父閲忓悕銆傝繖閲岀殑true鑷劧涔熸槸涓涓父閲忥紝鏃㈢劧鏄父閲忥紝鎴戜滑涓嶅彲鑳藉瀹冭祴鍊鹼紝閭d箞true = testA()鐨勬剰鎬濆氨涓嶆槸璧嬪鹼紝鑰屾槸榪涜鍖歸厤姣旇緝銆? 錛?錛夊尮閰嶅拰璧嬪煎悓鏃惰繘琛? 鎴戜滑鏉ョ湅榪欐牱涓孌典唬鐮併? case Result of {ok, Message} -> save(Message); {error, ErrorMessage} -> log(ErrorMessage) end. 榪欐浠g爜涓紝Result鏄竴涓猅uple綾誨瀷錛屽寘鍚袱涓厓绱狅紝絎竴涓厓绱犺〃紺烘垚鍔燂紙ok錛夋垨鑰呭け璐ワ紙error錛夛紝絎簩涓厓绱犺〃紺哄叿浣撶殑淇℃伅銆? 鍙互鐪嬪埌錛岃繖涓や釜鏉′歡鍒嗘敮涓紝鍚屾椂鍑虹幇浜嗗父閲忓拰鍙橀噺銆傜涓涓潯浠跺垎鏀腑鐨刼k鏄父閲忥紝Message鏄彉閲忥紱絎簩涓潯浠跺垎鏀腑鐨別rror鏄父閲忥紝ErrorMessage鏄彉閲忋? 榪欎袱涓潯浠跺垎鏀兘鏃㈡湁姣旇緝鍒ゆ柇錛屼篃鏈夊彉閲忚祴鍊箋傞鍏堬紝鍒ゆ柇ResultTuple涓殑絎竴涓厓绱犲拰鍝竴涓垎鏀殑絎竴涓厓绱犲尮閰嶏紝濡傛灉鐩擱厤錛岄偅涔堟妸ResultTuple涓殑絎簩涓厓绱犺祴緇欒繖涓垎鏀殑絎簩涓彉閲忓厓绱犮傚嵆錛屽鏋淩esult鐨勭涓涓厓绱犳槸ok錛岄偅涔堣蛋絎竴涓潯浠跺垎鏀紝騫朵笖鎶奟esult鐨勭浜屼釜鍏冪礌璧嬬粰Message鍙橀噺錛涘鏋淩esult鐨勭浜屼釜鍏冪礌鏄痚rror錛岄偅涔堣蛋絎簩涓潯浠跺垎鏀紝騫朵笖鎶奟esult鐨勭浜屼釜鍏冪礌璧嬬粰ErrorMessage鍙橀噺銆? 鍦↗ava絳夎璦涓紝瀹炵幇涓婅堪鐨勬潯浠跺垎鏀昏緫錛屽垯闇瑕佸鍐欏嚑鏉¤鍙rLang璇硶鍙互浠庡艦寮忎笂緹庡寲鍜岀畝鍖栭昏緫鍒嗘敮鍒嗘淳澶嶆潅鐨勭▼搴忋? 闄や簡鏀寔鏁扮浉絳夋瘮杈冿紝Pattern Match榪樺彲浠ヨ繘琛岃寖鍥存瘮杈冦佸ぇ灝忔瘮杈冪瓑錛岄渶瑕佺敤鍒板叧閿瓧when錛屼笉榪囩敤鍒皐hen鐨勬儏鍐碉紝灝辨瘮if else綆媧佷笉浜嗗灝戯紝榪欓噷涓嶅啀璧樿堪銆? 鍖垮悕鍑芥暟 ErLang鍏佽鍦ㄤ竴涓嚱鏁頒綋鍐呴儴瀹氫箟鍙︿竴涓尶鍚嶅嚱鏁幫紝榪欐槸鍑芥暟寮忕紪紼嬬殑鏈鍩烘湰鐨勫姛鑳姐傝繖鏍鳳紝鍑芥暟寮忚璦鎵嶅彲浠ユ敮鎸丆losure銆傛垜浠潵鐪嬩竴涓狤rLang鐨勫尶鍚嶅嚱鏁扮殑渚嬪瓙銆? outer( C ) –> Inner = fun(A, B) -> A + B + C end, Inner(2, 3). 榪欐浠g爜棣栧厛瀹氫箟浜嗕竴涓懡鍚嶅嚱鏁皁uter錛岀劧鍚庡湪outer鍑芥暟鍐呴儴瀹氫箟浜嗕竴涓尶鍚嶅嚱鏁般傚彲浠ョ湅鍒幫紝榪欎釜鍖垮悕鍑芥暟閲囩敤鍏抽敭瀛梖un鏉ュ畾涔夈傚墠闈㈣榪囷紝鍑芥暟寮忕紪紼嬬殑鍑芥暟灝辯浉褰撲簬闈㈠悜瀵硅薄緙栫▼鐨勭被瀹炰緥瀵硅薄錛屽尶鍚嶅嚱鏁拌嚜鐒朵篃鏄繖鏍鳳紝涔熺浉褰撲簬綾誨疄渚嬶紝鎴戜滑鍙互鎶婅繖涓尶鍚嶅嚱鏁拌祴緇欎竴涓彉閲廔nner錛岀劧鍚庢垜浠繕鍙互鎶婅繖涓彉閲忓綋浣滃嚱鏁版潵璋冪敤錛屾瘮濡傦紝Inner(2, 3)銆? fun鏄疎rLang鐢ㄦ潵瀹氫箟鍖垮悕鍑芥暟鐨勫叧閿瓧銆傝繖涓叧閿瓧寰堥噸瑕併俧un瀹氫箟鍖垮悕鍑芥暟鐨勭敤娉曚笉鏄緢澶嶆潅錛屽拰鍛藉悕鍑芥暟瀹氫箟綾諱技銆? 鍑芥暟鍒嗘敮鐨勫畾涔変篃鏄被浼鹼紝鍙槸闇瑕佺敤end緇撳熬錛岃屼笉鏄敤鍙ュ彿“.”緇撳熬錛岃屼笖fun鍙渶瑕佸啓涓嬈★紝涓嶉渶瑕佸悜鍛藉悕鍑芥暟閭f牱錛屾瘡涓垎鏀兘瑕佸啓銆傛瘮濡傦紝 MyFunction = fun(0) -> 0; (Number) -> Number * 10 + 1 end, MyFunction(3), 鍑芥暟浣滀負鍙橀噺 鍖垮悕鍑芥暟鍙互褰撲綔瀵硅薄璧嬬粰鍙橀噺錛屽懡鍚嶅嚱鏁板悓鏍蜂篃鍙互璧嬬粰鍙橀噺銆傚叿浣撶敤娉曡繕鏄渶瑕佸熷姪閲嶈鐨刦un鍏抽敭瀛椼傛瘮濡傦紝 MyFunction = fun outer / 1 灝卞彲浠ユ妸涓婅堪瀹氫箟鐨刼uter鍑芥暟璧嬬粰MyFunction鍙橀噺銆傚悗闈㈢殑 / 0琛ㄧず榪欎釜outer鍑芥暟鍙湁涓涓弬鏁般傚洜涓篍rLang鍏佽鏈夊涓悓鍚嶅嚱鏁扮殑瀹氫箟錛屽彧瑕佸弬鏁頒釜鏁頒笉鍚岋紝灝辨槸涓嶅悓鐨勫嚱鏁般? 鎴戜滑鍙互鐪嬪埌錛屼換浣曞嚱鏁伴兘鍙互浣滀負鍙橀噺錛屼篃鍙互浣滀負鍙傛暟鍜岃繑鍥炲間紶鏉ヤ紶鍘伙紝榪欎簺鍙橀噺涔熷彲浠ラ殢鏃朵綔涓哄嚱鏁拌繘琛岃皟鐢紝浜庢槸灝卞叿鏈変簡涓瀹氱殑鍔ㄦ佹с? 鍑芥暟鐨勫姩鎬佽皟鐢? ErLang鏈変竴涓猘pply鍑芥暟錛屽彲浠ュ姩鎬佽皟鐢ㄦ煇涓涓嚱鏁板彉閲忋? 鍩烘湰鐢ㄦ硶鏄?apply( 鍑芥暟鍙橀噺錛屽嚱鏁板弬鏁板垪琛?)銆傛瘮濡傦紝涓婇潰鐨凪yFunciton鍑芥暟鍙橀噺錛屽氨鍙互榪欎箞璋冪敤錛宎pply( MyFunction, [ 5 ])銆? 閭d箞鎴戜滑鑳藉惁鏍規(guī)嵁涓涓瓧絎︿覆浣滀負鍑芥暟鍚嶈幏鍙栦竴涓嚱鏁板彉閲忓憿錛熻繖鏍鋒垜浠氨鍙互鏍規(guī)嵁涓涓瓧絎︿覆鏉ュ姩鎬佽皟鐢ㄦ煇涓嚱鏁頒簡銆? ErLang涓紝鍋氬埌榪欎竴鐐瑰緢綆鍗曘傚墠闈㈣榪囷紝鍑芥暟鍚嶄竴鏃﹀畾涔変簡錛岃嚜鐒跺氨鍥哄畾浜嗭紝榪欎篃綾諱技浜庡父閲忓悕錛屽睘浜庝笉鍙彉鐨刟tom錛堝師瀛愶級銆傛墍鏈夌殑atom閮藉彲浠ヨ漿鎹㈡垚瀛楃涓詫紝涔熷彲浠ヤ粠瀛楃涓茶漿鎹㈣繃鏉ャ侲rLang涓殑瀛楃涓插疄璐ㄤ笂閮芥槸List銆傚瓧絎︿覆鍜宎tom涔嬮棿鐨勮漿鎹㈤氳繃list_to_atom鍜宎tom_to_list鏉ヨ漿鎹€? 浜庢槸鎴戜滑鍙互榪欐牱鑾峰彇MyFunciton錛歁yFunction = list_to_atom(“outer”) 濡傛灉outer鍑芥暟宸茬粡瀹氫箟錛岄偅涔圡yFucntion灝辯瓑浜巓uter鍑芥暟錛屽鏋渙uter鍑芥暟娌℃湁瀹氫箟錛岄偅涔坙ist_to_atom(“outer”)浼氫駭鐢熶竴涓柊鐨勫彨鍋歰uter鐨刟tom錛孧yFucntion灝辯瓑浜庤繖涓柊浜х敓鐨刟tom銆? 濡傛灉闇瑕佸己鍒朵駭鐢熶竴涓凡緇忓瓨鍦ㄧ殑atom錛岄偅涔堟垜浠渶瑕佽皟鐢╨ist_to_existing_atom杞崲鍑芥暟錛岃繖涓嚱鏁頒笉浼氫駭鐢熸柊鐨刟tom錛岃屾槸榪斿洖涓涓凡緇忓瓨鍦ㄤ簡鐨刟tom銆? Tuple浣滀負鏁版嵁鎴愬憳闆嗗悎 鍓嶉潰璁茶В鍑芥暟寮忕紪紼嬬壒鎬х殑鏃跺欙紝鎻愬埌浜嗗嚱鏁板紡緙栫▼娌℃湁闈㈠悜瀵硅薄緙栫▼鐨勬垚鍛樺彉閲忥紝榪欐槸涓涓檺鍒躲? ErLang鐨凾uple綾誨瀷鍙互涓瀹氱▼搴﹀厠鏈嶈繖涓檺鍒躲俆uple鍙互涓瀹氱▼搴︿笂鎷呭綋瀹圭撼鎴愬憳鍙橀噺鐨勮亴璐c? 闈㈠悜瀵硅薄鐨勭被瀹氫箟錛屽叾瀹炲氨鏄竴緹ゆ暟鎹拰鍑芥暟鐨勯泦鍚堬紝鍙槸闆嗗悎鐨勬垚鍛樹箣闂撮兘鏈変竴涓猼his鎸囬拡鐩稿叧鑱旓紝鍙互鐩鎬簰鎵懼埌銆? ErLang鐨凾uple綾誨瀷灝辨槸鏁版嵁鐨勯泦鍚堬紝鍙互寰堣嚜鐒跺湴鍙戞尌鎴愬憳鍙橀噺鐨勪綔鐢紝姣斿錛寋Member1, Member2}銆? 璇昏呭彲鑳戒細璇達紝ErLang鐨勫嚱鏁頒篃鍙互浣滀負鍙橀噺錛屼篃鍙互鏀懼埌Tuple閲岄潰錛屾瘮濡傦紝 { Memer1, Member2, Funtion1, Function2}銆傝繖涓嶅氨鍜岄潰鍚戝璞$紪紼嬩竴鏍蜂簡鍚楋紵 閬楁喚鐨勬槸錛岃繖鏍峰仛鏄緱涓嶅伩澶辯殑銆傚洜涓哄嚱鏁板紡緙栫▼娌℃湁闈㈠悜瀵硅薄鐨勯偅縐嶅唴鍦ㄧ殑this鎸囬拡鏀寔錛岃嚜鐒朵篃娌℃湁鍐呭湪鐨勫鎬佸拰緇ф壙鏀寔錛岀‖鎶婃暟鎹拰鍑芥暟緋呭悎鍦ㄤ竴涓猅uple閲岄潰錛屼竴鐐瑰ソ澶勯兘娌℃湁錛岃屼笖榪樹撫澶變簡鍑芥暟浣滀負瀹炰緥瀵硅薄鐨勭伒媧繪с? 鎵浠ワ紝鍑芥暟寮忕紪紼嬬殑鏈浣?jīng)_疄璺碉紙Best Practice錛夊簲璇ユ槸錛歍uple鐢ㄦ潵瀹圭撼鎴愬憳鏁版嵁錛屽嚱鏁版搷浣淭uple銆俆uple瀹氫箟鍜屽嚱鏁板畾涔夊姞鍦ㄤ竴璧鳳紝灝辨瀯鎴愪簡鏉炬暎鐨勬暟鎹粨鏋勶紝鍔熻兘涓婄被浼間簬闈㈠悜瀵硅薄鐨勭被瀹氫箟銆俆uple + 鍑芥暟鐨勬暟鎹粨鏋勶紝鍏鋒湁澶氭佺殑鐗規(guī)э紝鍥犱負鍑芥暟鏈韓鑳藉浣滀負鍙橀噺鏇挎崲錛涗絾鏄笉鍏鋒湁緇ф壙鐨勭壒鎬э紝鍥犱負娌℃湁this鎸囬拡鐨勫唴鍦ㄦ敮鎸併? 姝f槸鍥犱負Tuple鍦ㄦ暟鎹被鍨嬫瀯閫犳柟闈㈢殑閲嶅ぇ浣滅敤錛屾墍浠ワ紝ErLang涓撻棬寮曞叆浜嗕竴縐嶅彨鍋歊ecord鐨勫畯瀹氫箟錛屽彲浠ュTuple鐨勬暟緇勪笅鏍囦綅緗懡鍚嶃傛瘮濡傦紝鎶婄涓涓厓绱犲彨鍋欰ddress錛岀浜屼釜鍏冪礌鍙仛Zipcode錛岃繖鏍風▼搴忓憳灝卞彲浠ヨ繖浜涘悕瀛楄闂甌uple閲岄潰鐨勫厓绱狅紝鑰屼笉闇瑕佹寜鐓ф暟緇勪笅鏍囦綅緗潵璁塊棶銆? Tuple鍜孯ecord鐨勫叿浣撶敤娉曡繕鏄湁涓瀹氬鏉傚害錛岄檺浜庣瘒騫咃紝鏈珷娌℃湁灞曞紑璇存槑錛屽彧鎻愪簡涓浜涘師鐞嗘柟闈㈢殑瑕佺偣銆? 鍏跺畠 ErLang榪樻湁鍏跺畠璇硶鐗規(guī)у拰緇嗚妭錛屼笉鍐嶄竴涓璧樿堪銆傛湁鍏磋叮鐨勮鑰咃紝鍙互鑷鍘籈rLang緗戠珯錛坵ww.erlang.org錛夎繘琛岀爺絀躲?
]]>Erlang鍏ラ棬錛堜簲錛夆斺旇ˉ閬?/title> http://m.shnenglu.com/keigoliye/archive/2009/09/11/95888.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 11 Sep 2009 02:16:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/11/95888.html http://m.shnenglu.com/keigoliye/comments/95888.html http://m.shnenglu.com/keigoliye/archive/2009/09/11/95888.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/95888.html http://m.shnenglu.com/keigoliye/services/trackbacks/95888.html 1銆侲rlang鐨勪繚鐣欏瓧鏈夛細
after and andalso band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse query receive rem try when xor
鍩烘湰閮芥槸浜涚敤浜庨昏緫榪愮畻銆佷綅榪愮畻浠ュ強鐗規(guī)畩琛ㄨ揪寮忕殑絎﹀彿2.Erlang鐨勭被鍨?/span>錛岄櫎浜嗗湪鍓嶉潰鍏ラ棬涓鎻愬埌鐨勭被鍨嬪錛岃繕鍖呮嫭錛?br>1)Binary錛岀敤浜庤〃紺烘煇孌墊湭鐭ョ被鍨嬬殑鍐呭瓨鍖哄煙 姣斿錛?br>1> <<10,20>>. <<10,20>> 2> <<"ABC">>. <<65,66,67>> 2錛塕eference錛岄氳繃璋冪敤mk_ref/0浜х敓鐨勮繍琛屾椂鐨剈nique term 3)String錛屽瓧絎︿覆錛孍rlang涓殑瀛楃涓茬敤鍙屽紩鍙峰寘鎷搗鏉ワ紝鍏跺疄涔熸槸list銆傜紪璇戞椂鏈燂紝涓や釜閭昏繎鐨勫瓧絎︿覆灝嗚榪炴帴璧鋒潵錛屾瘮濡?string" "42" 絳変環(huán)浜?"string42" 4)Record錛岃褰曠被鍨嬶紝涓巆璇█涓殑struct綾諱技錛屾ā鍧楀彲浠ラ氳繃-record灞炴у0鏄庯紝姣斿錛?br>-module(person). -export([new/2]). -record(person, {name, age}). new(Name, Age) -> #person{name=Name, age=Age}. 1> person:new(dennis, 44). {person,dennis,44} 鍦ㄧ紪璇戝悗鍏跺疄宸茬粡琚漿鍖栦負tuple銆傚彲浠ラ氳繃Name#person.name鏉ヨ闂甆ame Record鐨刵ame灞炴с?br>3.妯″潡鐨勯瀹氫箟灞炴?/span>錛?br>-module(Module). 澹版槑妯″潡鍚嶇О錛屽繀欏諱笌鏂囦歡鍚嶇浉鍚?br>-export(Functions). 鎸囧畾鍚戝鐣屽鍑虹殑鍑芥暟鍒楄〃-import(Module,Functions). 寮曞叆鍑芥暟錛屽紩鍏ョ殑鍑芥暟鍙互琚綋浣滄湰鍦板畾涔夌殑鍑芥暟浣跨敤-compile(Options). 璁劇疆緙栬瘧閫夐」錛屾瘮濡俥xport_all -vsn(Vsn). 妯″潡鐗堟湰錛岃緗簡姝ら」錛屽彲浠ラ氳繃beam_lib:version/1 鑾峰彇姝ら」淇℃伅 鍙互閫氳繃-include鍜?include_lib鏉ュ寘鍚枃浠訛紝涓よ呯殑鍖哄埆鏄痠nclude-lib涓嶈兘閫氳繃緇濆璺緞鏌ユ壘鏂囦歡錛岃屾槸鍦ㄤ綘褰撳墠Erlang鐨刲ib鐩綍榪涜鏌ユ壘銆?br>4.try琛ㄨ揪寮?/span>錛宼ry琛ㄨ揪寮忓彲浠ヤ笌catch緇撳悎浣跨敤錛屾瘮濡傦細
try Expr catch throw:Term -> Term; exit:Reason -> {'EXIT',Reason} error:Reason -> {'EXIT',{Reason,erlang:get_stacktrace()}} end 涓嶄粎濡傛錛宼ry榪樺彲浠ヤ笌after緇撳悎浣跨敤錛岀被浼糺ava涓殑try..finally錛岀敤浜庤繘琛屾竻闄や綔鐢紝姣斿錛?br>termize_file(Name) -> {ok,F} = file:open(Name, [read,binary]), try {ok,Bin} = file:read(F, 1024*1024), binary_to_term(Bin) after file:close(F) end.5.鍒楄〃鎺ㄦ柇 錛圠ist Comprehensions錛夛紝鍑芥暟寮忚璦鐗規(guī)т箣涓錛孍rlang涓殑璇硶綾諱技錛?br>[Expr || Qualifier1,...,QualifierN] Expr鍙互鏄換鎰忕殑琛ㄨ揪寮忥紝鑰孮ualifier鏄痝enerator鎴栬協(xié)ilter銆傝繕鏄悇涓句緥瀛愯鏄庝笅銆?br>1> [X*2 || X <- [1,2,3]]. [2,4,6] 2> L=[1,2,3,4,5,6,7]. [1,2,3,4,5,6,7]
3> [X|X<-L,X>=3]. [3,4,5,6,7]
鍐嶇湅鍑犱釜姣旇緝閰風殑渚嬪瓙錛屾潵鑷狿rogramming Erlang 錛?br>姣斿蹇熸帓搴?/span>錛?br>-module(qsort). -export([qsort/1]). qsort([])->[]; qsort([Pivot|T])-> qsort([X||X<-T,X
6.瀹?/span>錛屽畾涔夊父閲忔垨鑰呭嚱鏁扮瓑絳夛紝璇硶濡備笅錛?br>
-define(Const, Replacement).
-define(Func(Var1,...,VarN), Replacement).
浣跨敤鐨勬椂鍊欏湪瀹忓悕鍓嶅姞涓棶鍙鳳紵錛屾瘮濡?Const錛孯eplacement灝嗘彃鍏ュ畯鍑虹幇鐨勪綅緗傜郴緇熼瀹氫箟浜嗕竴浜涘畯:
?MODULE 琛ㄧず褰撳墠妯″潡鍚?br>
?MODULE_STRING 鍚屼笂錛屼絾鏄互瀛楃涓插艦寮?br>
?FILE 褰撳墠妯″潡鐨勬枃浠跺悕
?LINE 璋冪敤鐨勫綋鍓嶄唬鐮佽鏁?br>
?MACHINE 鏈哄櫒鍚?br>
Erlang鐨勫畯涓嶤璇█鐨勫畯寰堢浉浼鹼紝鍚屾牱鏈夊畯鎸囩ず絎︼紝鍖呮嫭錛?br>
-undef(Macro). 鍙栨秷瀹忓畾涔?br>
-ifdef(Macro). 褰撳畯Macro鏈夊畾涔夌殑鏃跺欙紝鎵ц浠ヤ笅浠g爜
-ifndef(Macro). 鍚屼笂錛屽弽涔?br>
-else. 鎺ュ湪ifdef鎴栬卛fndef涔嬪悗錛岃〃紺轟笉婊¤凍鍓嶈呮潯浠舵椂鎵ц浠ヤ笅浠g爜
-endif. if緇堟絎?/dd> 鍋囪瀹?define(Square(X),X*X).鐢ㄤ簬璁$畻騫蟲柟錛岄偅涔??X灝嗚繑鍥瀀琛ㄨ揪寮忕殑瀛楃涓插艦寮忥紝綾諱技C璇█涓?arg
涓涓畝鍗曠殑瀹忎緥瀛愶細
ruby 浠g爜
- module (macros_demo).
-ifdef(debug).
-define(LOG(X), io:format ( "{~p,~p}: ~p~n" , [?MODULE,?LINE,X])).
-else .
-define(LOG(X), true ).
-endif.
-define(Square(X),X*X).
-compile(export_all).
test()->
A=3,
?LOG(A),
B=?Square(A),
io:format ( "square(~w) is ~w~n" ,[A,B]).
褰撶紪璇戞椂涓嶅紑鍚痙ebug閫夐」鐨勬椂鍊欙細
17> c(macros_demo).
{ok,macros_demo}
18> macros_demo:test().
square(3) is 9
褰撶紪璇戞椂寮鍚痙ebug涔嬪悗錛?br>
19> c(macros_demo,{d,debug}).
{ok,macros_demo}
20> macros_demo:test().
{macros_demo,11}: 3
square(3) is 9
ok
鍙互鐪嬪埌LOG鐨勮緭鍑轟簡錛岃鏁般佹ā鍧楀悕浠ュ強鍙傛暟
7銆?span style="FONT-WEIGHT: bold">Process Dictionary 錛屾瘡涓繘紼嬮兘鏈夎嚜宸辯殑process dictionary錛岀敤浜庡瓨鍌ㄨ繖涓繘紼嬪唴鐨勫叏灞鍙橀噺錛屽彲浠ラ氳繃涓嬪垪
BIFs鎿嶄綔錛?br>
put(Key, Value)
get(Key)
get()
get_keys(Value)
erase(Key)
erase()
8銆佸叧浜庡垎甯冨紡緙栫▼ 錛岄渶瑕佽ˉ鍏呯殑鍑犵偣
1錛夎妭鐐逛箣闂寸殑榪炴帴榛樿鏄痶ransitive錛屼篃灝辨槸褰撹妭鐐笰榪炴帴浜嗚妭鐐笲錛岃妭鐐笲榪炴帴浜嗚妭鐐笴錛岄偅涔堣妭鐐笰涔熶笌鑺傜偣C浜掔浉榪炴帴
鍙互閫氳繃鍚姩鑺傜偣鏃舵寚瀹氬弬鏁?connect_all false鏉ュ彇娑堥粯璁よ涓?br>
2錛夐殣钘忚妭鐐癸紝鏌愪簺鎯呭喌涓嬶紝浣犲笇鏈涜繛鎺ヤ竴涓妭鐐硅屼笉鍘昏繛鎺ュ叾浠栬妭鐐癸紝浣犲彲浠ラ氳繃鍦ㄨ妭鐐瑰惎鍔ㄦ椂鎸囧畾-hidden閫夐」
鏉ュ惎鍔ㄤ竴涓猦idden node銆傚湪姝ゆ儏鍐典笅錛岄氳繃nodes()鏌ョ湅鎵鏈夎繛鎺ョ殑鑺傜偣灝嗕笉浼氬嚭鐜伴殣钘忕殑鑺傜偣錛屾兂鐪嬪埌闅愯棌鐨勮妭鐐?br>
鍙互閫氳繃nodes(hidden)鎴栬卬odes(connected)鏉ユ煡鐪嬨?br>
瀹屾暣鐨別rl閫夐」濡備笅錛?br>
-connect_all false
涓婇潰宸茬粡瑙i噴銆?
-hidden
鍚姩涓涓猦idden node
-name Name
鍚姩涓涓郴緇熸垚涓鴻妭鐐癸紝浣跨敤long name.
-setcookie Cookie
涓?code>Erlang :set_cookie(node(), Cookie).鐩稿悓錛岃緗甿agic cookie
-sname Name
鍚姩涓涓狤rlang緋葷粺浣滀負鑺傜偣錛屼嬌鐢╯hort name
娉ㄦ剰,short name鍚姩鐨勮妭鐐規(guī)槸鏃犳硶涓巐ong name鑺傜偣閫氫俊鐨?/span>銆?br>
.涓涓皬緇嗚妭錛屽湪Erlang涓皬浜庣瓑浜庢槸鐢?<琛ㄧず錛岃屼笉鏄竴鑸璦涓殑<=璇硶錛屾垜鐘繃閿欒鐨勫湴鏂癸紝鍚屾牱錛屼笉絳変簬閮芥槸鐢?鍙鳳紝鑰屼笉鏄?/span>!,姣斿/=銆?/=銆?/span>10.and or 鍜宎ndalso orelse鐨勫尯鍒?/span> and鍜宱r浼氳綆椾袱杈圭殑琛ㄨ揪寮忥紝鑰宎ndalso鍜宱relse鐨勬眰鍊奸噰鐢ㄧ煭璺満鍒訛紝姣斿exp1 andalso exp2錛屽綋exp1榪斿洖false涔嬪悗錛屽氨涓嶄細鍘繪眰鍊?br>exp2錛岃屾槸鐩存帴榪斿洖false錛岃宔xp1 and exp2浼氬exp1鍜宔xp2閮借繘琛屾眰鍊鹼紝or涓巓relse涔熺被浼箋?/pre>
]]> Erlang鍏ラ棬錛堜笁錛夆斺斿垎甯冨紡緙栫▼ http://m.shnenglu.com/keigoliye/archive/2009/09/11/95886.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 11 Sep 2009 02:13:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/11/95886.html http://m.shnenglu.com/keigoliye/comments/95886.html http://m.shnenglu.com/keigoliye/archive/2009/09/11/95886.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/95886.html http://m.shnenglu.com/keigoliye/services/trackbacks/95886.html 涓銆佸垎甯冨紡鏈哄埗 涓嬪垪鐨凚IFs鏄敤浜庡垎甯冨紡緙栫▼錛?br>spawn(Node, Mod, Func, Args) 鍚姩榪滅▼鑺傜偣鐨勪竴涓繘紼?br>spawn_link(Node, Mod, Func, Args) 鍚姩榪滅▼鑺傜偣鐨勪竴涓繘紼嬪茍鍒涘緩榪炴帴鍒拌榪涚▼monitor_node(Node, Flag) 濡傛灉Flag鏄痶rue,榪欎釜鍑芥暟灝嗕嬌璋冪敤錛堣鍑芥暟錛夌殑榪涚▼鍙互鐩戞帶鑺傜偣Node銆傚鏋滆妭鐐瑰凡緇忚垗寮冩垨鑰呭茍涓嶅瓨鍦紝璋冪敤鐨勮繘紼嬪皢鏀跺埌涓涓獅nodedown,Node}鐨勬秷鎭傚鏋淔lag鏄痜alse,鐩戞帶灝嗚鍏抽棴node() 榪斿洖鎴戜滑鑷繁鐨勮繘紼媙amenodes() 榪斿洖鍏朵粬宸茬煡鐨勮妭鐐筺ame鍒楄〃node(Item) 榪斿洖鍘熸潵Item鐨勮妭鐐瑰悕縐幫紝Item鍙互鏄疨id,寮曠敤錛坮eference錛夋垨鑰呯鍙?port)disconnect_node(Nodename) 浠庤妭鐐筃odename鏂紑銆?br> 鑺傜偣鏄垎甯冨紡Erlang鐨勬牳蹇冩蹇點傚湪涓涓垎甯冨紡Erlang搴旂敤涓紝鏈錛坱erm)鑺傜偣(node錛夋剰鍛崇潃涓涓彲浠ュ姞鍏ュ垎甯冨紡 transactions鐨勮繍琛岀郴緇熴傞氳繃涓涓О涓簄et kernal鐨勭壒孌婅繘紼嬶紝涓涓嫭绔嬬殑Erlang緋葷粺鍙互鎴愪負涓涓垎甯冨紡Erlang緋葷粺鐨勪竴閮ㄥ垎銆傚綋net kernal榪涚▼鍚姩鐨勬椂鍊欙紝鎴戜滑縐扮郴緇熸槸alive鐨勩?br> 涓庤繙紼嬭妭鐐逛笂鐨勮繘紼嬭繘琛岄氫俊錛屼笌鍚屼竴鑺傜偣鍐呯殑榪涚▼閫氫俊鍙湁涓鐐逛笉鍚岋細
java 浠g爜
鏄劇劧錛岄渶瑕佹帴鏀舵柟澧炲姞涓涓弬鏁癗ode鐢ㄤ簬鎸囧畾鎺ュ彈榪涚▼鎵鍦ㄧ殑鑺傜偣銆傝妭鐐圭殑name涓鑸槸鐢ˊ闅斿紑鐨刟tom綾誨瀷錛屾瘮濡俻ong@dennis錛岃〃紺鴻綆楁満鍚嶄負dennis涓婄殑pong鑺傜偣銆傞氳繃鎵ц:
java 浠g爜
灝嗗湪鎵ц鐨勮綆楁満涓垱寤轟竴涓妭鐐筽ong銆備負浜嗚繍琛屼笅闈㈢殑渚嬪瓙錛屼綘鍙兘闇瑕佷袱鍙拌綆楁満錛屽鏋滃彧鏈変竴鍙幫紝鍙鍚屾椂寮涓や釜Erlang緋葷粺騫朵互涓嶅悓鐨勮妭鐐瑰悕縐拌繍琛屼篃鍙互銆?br> 浜屻佷竴浜涗緥瀛愩?br> 榪欎釜渚嬪瓙瀹屽叏鏉ヨ嚜涓婇潰鎻愬埌鐨勭炕璇戠殑榪炴帴錛屽叧浜庡垎甯冨紡緙栫▼鐨勭珷鑺傘傛垜澧炲姞浜嗘埅鍥懼拰璇存槑銆?br>棣栧厛鏄唬鐮侊細
java 浠g爜
-module(tut17).
-export([start_ping/1 , start_pong/ 0 , ping/ 2 , pong/ 0 ]).
ping(0 , Pong_Node) ->
{pong, Pong_Node} ! finished,
io:format("ping finished~n" , []);
ping(N, Pong_Node) ->
{pong, Pong_Node} ! {ping, self()},
receive
pong ->
io:format("Ping received pong~n" , [])
end,
ping(N - 1 , Pong_Node).
pong() ->
receive
finished ->
io:format("Pong finished~n" , []);
{ping, Ping_PID} ->
io:format("Pong received ping~n" , []),
Ping_PID ! pong,
pong()
end.
start_pong() ->
register(pong, spawn(tut17, pong, [])).
start_ping(Pong_Node) ->
spawn(tut17, ping, [3 , Pong_Node]).
浠g爜鏄垱寤轟袱涓浉浜掗氫俊鐨勮繘紼嬶紝鐩鎬簰鍙戦佹秷鎭茍閫氳繃io鏄劇ず鍦ㄥ睆騫曚笂錛屾湰鏉ユ槸涓涓崟涓緋葷粺鐨勪緥瀛愶紝鐜板湪鎴戜滑璁╀袱涓繘紼嬭繍琛屽湪涓嶅悓鐨勪袱涓妭鐐逛笂銆傛敞鎰?start_ping鏂規(guī)硶錛屽垱寤虹殑榪涚▼璋冪敤ping鏂規(guī)硶錛宲ing鏂規(guī)硶鏈変袱涓弬鏁幫紝涓涓槸鍙戦佹秷鎭殑嬈℃暟錛屼竴涓氨鏄繙紼嬭妭鐐圭殑name浜嗭紝涔熷氨鏄垜浠皢瑕?鍒涘緩鐨勮繘紼媝ong鐨勬墍鍦ㄨ妭鐐廣俿tart_pong鍒涘緩涓涓皟鐢ㄥ嚱鏁皃ong鐨勮繘紼嬶紝騫舵敞鍐屼負鍚嶅瓧pong錛堝洜姝ゅ湪ping鏂規(guī)硶涓彲浠ョ洿鎺ュ彂閫佹秷鎭粰 pong)銆?br> 鎴戞槸鍦╳indows鏈哄櫒涓婃祴璇曪紝棣栧厛鎵撳紑涓や釜cmd紿楀彛錛屽茍cd鍒癊rlang鐨勫畨瑁呯洰褰曚笅鐨刡in鐩綍錛屾瘮濡侰:\Program Files\erl5.5.3\bin,灝嗕笂闈㈢殑紼嬪簭瀛樹負tut17.erl錛屽茍鎷瘋礉鍒板悓涓涓洰褰曚笅銆傛垜浠皢鍒涘緩涓や釜鑺傜偣錛屼竴涓彨 ping@dennis,涓涓彨pong@dennis,鍏朵腑dennis鏄垜鐨勬満鍣ㄥ悕銆傝涓嬪浘錛?br> 閲囩敤鍚屾牱鐨勫懡浠?br> erl - sname ping 鍒涘緩ping鑺傜偣銆傜劧鍚庡湪pong鑺傜偣涓嬫墽琛宻tart_pong()錛?br> OK,榪欐牱灝卞湪鑺傜偣pong涓婂惎鍔ㄤ簡pong榪涚▼錛岀劧鍚庡湪ping鑺傜偣璋冪敤start_ping錛屼紶鍏ュ弬鏁板氨鏄痯ong@dennis
java 浠g爜
tut17:start_ping(pong @dennis ).
鎵ц緇撴灉濡備笅鍥撅細 鍚屾牱鍦╬ong鑺傜偣涓婁篃鍙互鐪嬪埌錛?br> 緇撴灉濡傛垜浠鏈熺殑閭f牱錛屼笉鍚岃妭鐐逛笂鐨勪袱涓繘紼嬬浉浜掗氫俊濡傛綆鍗曘傛垜浠粰妯″潡tut17澧炲姞涓涓柟娉曪紝鐢ㄤ簬鍚姩榪滅▼榪涚▼錛屼篃灝辨槸璋冪敤spawn(Node,Module,Func,Args)鏂規(guī)硶錛?br>
java 浠g爜
start(Ping_Node) ->
register(pong, spawn(tut17, pong, [])),
spawn(Ping_Node, tut17, ping, [3 , node()]).
pong榪涚▼鍚姩Ping_Node鑺傜偣涓婄殑榪涚▼ping銆傚叿浣撶粨鏋滀笉鍐嶇粰鍑恒?br>
]]> Erlang鍏ラ棬錛堝洓錛夆斺旈敊璇鐞嗗拰椴佹鎬?/title> http://m.shnenglu.com/keigoliye/archive/2009/09/11/95887.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 11 Sep 2009 02:13:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/11/95887.html http://m.shnenglu.com/keigoliye/comments/95887.html http://m.shnenglu.com/keigoliye/archive/2009/09/11/95887.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/95887.html http://m.shnenglu.com/keigoliye/services/trackbacks/95887.html Erlang鐨勬満鍒舵湁錛?br>1)鐩戞帶鏌愪釜琛ㄨ揪寮忕殑鎵ц 2錛夌洃鎺у叾浠栬繘紼嬬殑琛屼負 3錛夋崟鎹夋湭瀹氫箟鍑芥暟鎵ц閿欒絳?br>涓銆乧atch鍜宼hrow璇彞 璋冪敤鏌愪釜浼氫駭鐢熼敊璇殑琛ㄨ揪寮忎細瀵艱嚧璋冪敤榪涚▼鐨勯潪姝e父閫鍑猴紝姣斿閿欒鐨勬ā寮忓尮閰嶏紙2=3錛夛紝榪欑鎯呭喌涓嬪彲浠ョ敤catch璇彞錛?br> catch expression 璇曠湅涓涓緥瀛愶紝涓涓嚱鏁癴oo錛?br>
java 浠g爜
foo( 1 ) ->
hello;
foo(2 ) ->
throw ({myerror, abc});
foo(3 ) ->
tuple_to_list(a);
foo(4 ) ->
exit({myExit, 222 }).
褰撴病鏈変嬌鐢╟atch鐨勬椂鍊欙紝鍋囪鏈変竴涓爣璇嗙涓篜id鐨勮繘紼嬭皟鐢ㄥ嚱鏁癴oo錛堝湪涓涓ā鍧椾腑錛夛紝閭d箞錛?br>foo(1) - 榪斿洖hello foo(2) - 璇彞throw({myerror, abc})鎵ц錛屽洜涓烘垜浠病鏈夊湪涓涓猚atch涓皟鐢╢oo(2),鍥犳榪涚▼Pid灝嗗洜涓洪敊璇岀粓姝€?br> foo(3) - tuple_to_list灝嗕竴涓厓緇勮漿鍖栦負鍒楄〃錛屽洜涓篴涓嶆槸鍏冪粍錛屽洜姝よ繘紼婸id鍚屾牱鍥犱負閿欒鑰岀粓姝?br> foo(4) - 鍥犱負娌℃湁浣跨敤catch錛屽洜姝oo(4)璋冪敤浜唀xit鍑芥暟灝嗕嬌榪涚▼Pid緇堟錛寋myExit, 222} 鍙傛暟鐢ㄤ簬璇存槑閫鍑虹殑鍘熷洜銆?br> foo(5) - 榪涚▼Pid灝嗗洜涓篺oo(5)鐨勮皟鐢ㄨ岀粓姝紝鍥犱負娌℃湁鍜宖oo(5)鍖歸厤鐨勫嚱鏁癴oo/1銆?br> 璁╂垜浠湅鐪嬬敤catch涔嬪悗鏄粈涔堟牱錛?br>
java 浠g爜
demo(X) ->
case catch foo(X) of
{myerror, Args} ->
{user_error, Args};
{'EXIT', What} ->
{caught_error, What};
Other ->
Other
end.
鍐嶇湅鐪嬬粨鏋滐紝 demo(1) - 娌℃湁閿欒鍙戠敓錛屽洜姝atch璇彞灝嗚繑鍥炶〃杈懼紡緇撴灉hello demo(2) - foo(2)鎶涘嚭閿欒{myerror, abc}錛岃catch榪斿洖錛屽洜姝ゅ皢榪斿洖{user_error,abc} demo(3) - foo(3)鎵ц澶辮觸錛屽洜涓哄弬鏁伴敊璇紝鍥犳catch榪斿洖{'EXIT',badarg'},鏈鍚庤繑鍥瀧caught_error,badarg} demo(4) - 榪斿洖{caught_error,{myexit,222}} demo(5) - 榪斿洖{caught_error,function_clause} 浣跨敤catch鍜宼hrow鍙互灝嗗彲鑳戒駭鐢熼敊璇殑浠g爜鍖呰璧鋒潵錛宼hrow鍙互鐢ㄤ簬灝鵑掑綊鐨勯鍑虹瓑絳夈侲rlang鏄拰scheme涓鏍瘋繘琛屽熬閫掑綊浼樺寲鐨勶紝瀹冧滑閮芥病鏈夋樉寮忕殑榪唬緇撴瀯錛堟瘮濡俧or寰幆錛?br>浜屻佽繘紼嬬殑緇堟 鍦ㄨ繘紼嬩腑璋冪敤exit鐨凚IFs灝卞彲浠ユ樉寮忓湴緇堟榪涚▼錛宔xit(normal)琛ㄧず姝e父緇堟錛宔xit(Reason)閫氳繃Reason緇欏嚭闈炴甯哥粓姝㈢殑鍘熷洜銆傝繘紼嬬殑緇堟涔熷畬鍏ㄦ湁鍙兘鏄洜涓鴻繍琛屾椂閿欒寮曡搗鐨勩?br>涓夈佽繛鎺ョ殑榪涚▼ 榪涚▼涔嬮棿鐨勮繛鎺ユ槸鍙屽悜鐨勶紝涔熷氨鏄榪涚▼A鎵撳紑涓涓繛鎺ュ埌B,涔熸剰鍛崇潃鏈変竴涓粠B鍒癆鐨勮繛鎺ャ傚綋榪涚▼緇堟鐨勬椂鍊欙紝鏈変竴涓狤XIT淇″彿灝嗗彂緇欐墍鏈変笌瀹冭繛鎺ョ殑榪涚▼銆備俊鍙風殑鏍煎紡濡備笅錛?br> {'EXIT', Exiting_Process_Id, Reason} Exiting_Process_Id 鏄寚緇堟鐨勮繘紼嬫爣璁扮 Reason 鏄繘紼嬬粓姝㈢殑鍘熷洜銆傚鏋淩eason鏄痭ormal錛屾帴鍙楄繖涓俊鍙風殑榪涚▼鐨勯粯璁よ涓烘槸蹇界暐榪欎釜淇″彿銆傞粯璁ゅExit淇″彿鐨勫鐞嗗彲浠ヨ閲嶅啓錛屼互鍏佽榪涚▼瀵笶xit淇″彿鐨勬帴鍙楀仛鍑轟笉鍚岀殑鍙嶅簲銆?br>1.榪炴帴榪涚▼錛?br>閫氳繃link(Pid)錛屽氨鍙互鍦ㄨ皟鐢ㄨ繘紼嬩笌榪涚▼Pid涔嬮棿寤虹珛榪炴帴 2.鍙栨秷榪炴帴 鍙嶄箣閫氳繃unlink(Pid)鍙栨秷榪炴帴銆? 3.鍒涚珛榪涚▼騫惰繛鎺ワ細 閫氳繃spawn_link(Module, Function, ArgumentList)鍒涘緩榪涚▼騫惰繛鎺ワ紝璇ユ柟娉曡繑鍥炴柊鍒涘緩鐨勮繘紼婸id 閫氳繃榪涚▼鐨勭浉浜掕繛鎺ワ紝璁稿鐨勮繘紼嬪彲浠ョ粍緇囨垚涓涓綉鐘剁粨鏋勶紝EXIT淇″彿錛堥潪normal)浠庢煇涓繘紼嬪彂鍑猴紙璇ヨ繘紼嬬粓姝級錛屾墍鏈変笌瀹冪浉榪炵殑榪涚▼浠ュ強涓庤繖浜涜繘 紼嬬浉榪炵殑鍏朵粬榪涚▼錛岄兘灝嗘敹鍒拌繖涓俊鍙峰茍緇堟錛岄櫎闈炲畠浠疄鐜頒簡鑷畾涔夌殑EXIT淇″彿澶勭悊鏂規(guī)硶銆備竴涓繘紼嬮摼鐘剁粨鏋勭殑渚嬪瓙錛?br>
java 浠g爜
-module(normal).
-export([start/1 , p1/ 1 , test/ 1 ]).
start(N) ->
register(start, spawn_link(normal, p1, [N - 1 ])).
p1(0 ) ->
top1();
p1(N) ->
top(spawn_link(normal, p1, [N - 1 ]),N).
top(Next, N) ->
receive
X ->
Next ! X,
io:format("Process ~w received ~w~n" , [N,X]),
top(Next,N)
end.
top1() ->
receive
stop ->
io:format("Last process now exiting ~n" , []),
exit(finished);
X ->
io:format("Last process received ~w~n" , [X]),
top1()
end.
test(Mess) ->
start ! Mess.
鎵ц錛?br>
java 浠g爜
> normal:start( 3 ).
true
> normal:test(123 ).
Process 2 received 123
Process 1 received 123
Last process received 123
> normal:test(stop).
Process 2 received stop
Process 1 received stop
Last process now exiting
stop
鍥涖佽繍琛屾椂澶辮觸 涓涓繍琛屾椂閿欒灝嗗鑷磋繘紼嬬殑闈炴甯哥粓姝紝浼撮殢鐫闈炴甯哥粓姝XIT淇″彿灝嗗彂鍑虹粰鎵鏈夎繛鎺ョ殑榪涚▼錛孍XIT淇″彿涓湁Reason騫朵笖Reason涓寘鍚竴涓猘tom綾誨瀷鐢ㄤ簬璇存槑閿欒鐨勫師鍥狅紝甯歌鐨勫師鍥犲涓嬶細badmatch - 鍖歸厤澶辮觸錛屾瘮濡備竴涓繘紼嬭繘琛?=3鐨勫尮閰嶏紝榪欎釜榪涚▼灝嗙粓姝紝騫跺彂鍑簕'EXIT', From, badmatch}淇″彿緇欒繛鎺ョ殑榪涚▼badarg - 欏懼悕鎬濅箟錛屽弬鏁伴敊璇紝姣斿atom_to_list(123),鏁板瓧涓嶆槸atom錛屽洜姝ゅ皢鍙戝嚭{'EXIT', From, badarg}淇″彿緇欒繛鎺ヨ繘紼?br>case_clause - 緙哄皯鍒嗘敮鍖歸厤錛屾瘮濡?br>
java 浠g爜
M = 3 ,
case M of
1 ->
yes;
2 ->
no
end.
娌℃湁鍒嗘敮3錛屽洜姝ゅ皢鍙戝嚭{'EXIT', From, case_clause}緇欒繛鎺ヨ繘紼?br>if_clause - 鍚岀悊錛宨f璇彞緙哄皯鍖歸厤鍒嗘敮function_clause - 緙哄皯鍖歸厤鐨勫嚱鏁幫紝姣斿錛?br>
java 浠g爜
foo( 1 ) ->
yes;
foo(2 ) ->
no.
濡傛灉鎴戜滑璋冪敤foo(3)錛屽洜涓烘病鏈夊尮閰嶇殑鍑芥暟錛屽皢鍙戝嚭{'EXIT', From, function_clause} 緇欒繛鎺ョ殑榪涚▼銆?br>undef - 榪涚▼鎵ц涓涓笉瀛樺湪鐨勫嚱鏁?br>badarith - 闈炴硶鐨勭畻鏈繍綆楋紝姣斿1+foo銆?br>timeout_value - 闈炴硶鐨勮秴鏃舵椂闂磋緗紝蹇呴』鏄暣鏁版垨鑰卛nfinitynocatch - 浣跨敤浜唗hrow錛屾病鏈夌浉搴旂殑catch鍘婚氳銆?br>浜斻佷慨鏀歸粯璁ょ殑淇″彿鎺ユ敹action 褰撹繘紼嬫帴鏀跺埌EXIT淇″彿錛屼綘鍙互閫氳繃process_flag/2鏂規(guī)硶鏉ヤ慨鏀歸粯璁ょ殑鎺ユ敹琛屼負銆傛墽琛宲rocess_flag(trap_exit, true)璁劇疆鎹曡幏EXIT淇″彿涓虹湡鏉ユ敼鍙橀粯璁よ涓猴紝涔熷氨鏄皢EXIT淇″彿浣滀負涓鑸殑榪涚▼闂撮氫俊鐨勪俊鍙瘋繘琛屾帴鍙楀茍澶勭悊錛沺rocess_flag (trap_exit,false)灝嗛噸鏂板紑鍚粯璁よ涓恒?br> 渚嬪瓙錛?br>
java 浠g爜
-module(link_demo).
-export([start/0 , demo/ 0 , demonstrate_normal/ 0 , demonstrate_exit/ 1 ,
demonstrate_error/0 , demonstrate_message/ 1 ]).
start() ->
register(demo, spawn(link_demo, demo, [])).
demo() ->
process_flag(trap_exit, true ),
demo1().
demo1() ->
receive
{'EXIT', From, normal} ->
io:format("Demo process received normal exit from ~w~n" ,[From]),
demo1();
{'EXIT', From, Reason} ->
io:format("Demo process received exit signal ~w from ~w~n" ,[Reason, From]),
demo1();
finished_demo ->
io:format("Demo finished ~n" , []);
Other ->
io:format("Demo process message ~w~n" , [Other]),
demo1()
end.
demonstrate_normal() ->
link(whereis(demo)).
demonstrate_exit(What) ->
link(whereis(demo)),
exit(What).
demonstrate_message(What) ->
demo ! What.
demonstrate_error() ->
link(whereis(demo)),
1 = 2 .
鍒涘緩鐨勮繘紼嬫墽琛宒emo鏂規(guī)硶錛宒emo鏂規(guī)硶涓緗簡trap_exit涓簍rue,鍥犳錛屽湪receive涓彲浠ュ儚瀵瑰緟涓鑸殑淇℃伅涓鏍峰鐞咵XIT淇″彿錛岃繖涓▼搴忔槸寰堢畝鍗曚簡錛屾祴璇曠湅鐪嬶細
java 浠g爜
> link_demo:start().
true
> link_demo:demonstrate_normal().
true
Demo process received normal exit from <0.13 . 1 >
> link_demo:demonstrate_exit(hello).
Demo process received exit signal hello from <0.14 . 1 >
** exited: hello **
> link_demo:demonstrate_exit(normal).
Demo process received normal exit from <0.13 . 1 >
** exited: normal **
> link_demo:demonstrate_error().
!!! Error in process <0.17 . 1 > in function
!!! link_demo:demonstrate_error()
!!! reason badmatch
** exited: badmatch **
Demo process received exit signal badmatch from <0.17 . 1 >
鍏佹湭瀹氫箟鍑芥暟鍜屾湭娉ㄥ唽鍚嶅瓧 1.褰撹皟鐢ㄤ竴涓湭瀹氫箟鐨勫嚱鏁版椂錛孧od:Func(Arg0,...,ArgN)錛岃繖涓皟鐢ㄥ皢琚漿涓猴細 error_handler:undefined_function(Mod, Func, [Arg0,...,ArgN]) 鍏朵腑鐨別rror_handler妯″潡鏄郴緇熻嚜甯︾殑閿欒澶勭悊妯″潡 2.褰撶粰涓涓湭娉ㄥ唽鐨勮繘紼嬪悕鍙戦佹秷鎭椂錛岃皟鐢ㄥ皢琚漿涓猴細 error_handler:unregistered_name(Name,Pid,Message) 3.濡傛灉涓嶄嬌鐢ㄧ郴緇熻嚜甯︾殑error_handler錛屽彲浠ラ氳繃process_flag(error_handler, MyMod) 璁劇疆鑷繁鐨勯敊璇鐞嗘ā鍧椼?br>涓冦丆atch Vs. Trapping Exits 榪欎袱鑰呯殑鍖哄埆鍦ㄤ簬搴旂敤鍦烘櫙涓嶅悓錛孴rapping Exits搴旂敤浜庡綋鎺ユ敹鍒板叾浠栬繘紼嬪彂閫佺殑EXIT淇″彿鏃訛紝鑰宑atch浠呯敤浜庤〃杈懼紡鐨勬墽琛屻?br> 絎?绔犱粙緇嶄簡濡備綍鍒╃敤閿欒澶勭悊鏈哄埗鍘繪瀯閫犱竴涓仴澹殑緋葷粺錛岀敤浜嗗嚑涓緥瀛愶紝鎴戝皢8.2鑺傜殑渚嬪瓙瀹屾暣鍐欎簡涓嬶紝騫舵坊鍔犲鎴風榪涚▼鐢ㄤ簬嫻嬭瘯錛?br>
java 浠g爜
-module(allocator).
-export([start/1 ,server/ 2 ,allocate/ 0 ,free/ 1 ,start_client/ 0 ,loop/ 0 ]).
start(Resources) ->
Pid = spawn(allocator, server, [Resources,[]]),
register(resource_alloc, Pid).
%鍑芥暟鎺ュ彛
allocate() ->
request(alloc).
free(Resource) ->
request({free,Resource}).
request(Request) ->
resource_alloc ! {self(),Request},
receive
{resource_alloc, error} ->
exit(bad_allocation); % exit added here
{resource_alloc, Reply} ->
Reply
end.
% The server.
server(Free, Allocated) ->
process_flag(trap_exit, true ),
receive
{From,alloc} ->
allocate(Free, Allocated, From);
{From,{free,R}} ->
free(Free, Allocated, From, R);
{'EXIT', From, _ } ->
check(Free, Allocated, From)
end.
allocate([R|Free], Allocated, From) ->
link(From),
io:format("榪炴帴瀹㈡埛绔繘紼媬w~n" ,[From]),
From ! {resource_alloc,{yes,R}},
server(Free, [{R,From}|Allocated]);
allocate([], Allocated, From) ->
From ! {resource_alloc,no},
server([], Allocated).
free(Free, Allocated, From, R) ->
case lists:member({R,From}, Allocated) of
true ->
From ! {resource_alloc,ok},
Allocated1 = lists:delete({R, From}, Allocated),
case lists:keysearch(From, 2 ,Allocated1) of
false ->
unlink(From),
io:format("浠庤繘紼媬w鏂紑~n" ,[From]);
_->
true
end,
server([R|Free],Allocated1);
false ->
From ! {resource_alloc,error},
server(Free, Allocated)
end.
check(Free, Allocated, From) ->
case lists:keysearch(From, 2 , Allocated) of
false ->
server(Free, Allocated);
{value, {R, From}} ->
check([R|Free],
lists:delete({R, From}, Allocated), From)
end.
start_client()->
Pid2=spawn(allocator,loop,[]),
register(client, Pid2).
loop()->
receive
allocate->
allocate(),
loop();
{free,Resource}->
free(Resource),
loop();
stop->
true ;
_->
loop()
end.
鍥炲浜嗭紝鏈夌┖鍐嶈緇嗚鏄庝笅榪欎釜渚嬪瓙鍚с傛墽琛岋細
java 浠g爜
1 > c(allocator).
{ok,allocator}
2 > allocator:start([ 1 , 2 , 3 , 4 , 5 , 6 ]).
true
3 > allocator:start_client().
true
4 > client!allocate
.
allocate榪炴帴瀹㈡埛绔繘紼?lt;0.37 . 0 >
5 > client!allocate.
allocate榪炴帴瀹㈡埛绔繘紼?lt;0.37 . 0 >
6 > client!allocate.
allocate榪炴帴瀹㈡埛绔繘紼?lt;0.37 . 0 >
7 > allocator:allocate().
榪炴帴瀹㈡埛绔繘紼?lt;0.28 . 0 >
{yes,4 }
8 > client!{free, 1 }.
{free,1 }
9 > client!{free, 2 }.
{free,2 }
10 > client!allocate.
allocate榪炴帴瀹㈡埛绔繘紼?lt;0.37 . 0 >
11 > client!allocate.
allocate榪炴帴瀹㈡埛绔繘紼?lt;0.37 . 0 >
12 > client!stop.
stop
13 > allocator:allocate().
榪炴帴瀹㈡埛绔繘紼?lt;0.28 . 0 >
{yes,3 }
14 > allocator:allocate().
榪炴帴瀹㈡埛绔繘紼?lt;0.28 . 0 >
{yes,2 }
15 > allocator:allocate().
榪炴帴瀹㈡埛绔繘紼?lt;0.28 . 0 >
{yes,1 }
16 >
]]> Erlang鍏ラ棬錛堜簩錛夆斿茍鍙戠紪紼?/title> http://m.shnenglu.com/keigoliye/archive/2009/09/11/95885.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 11 Sep 2009 02:12:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/11/95885.html http://m.shnenglu.com/keigoliye/comments/95885.html http://m.shnenglu.com/keigoliye/archive/2009/09/11/95885.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/95885.html http://m.shnenglu.com/keigoliye/services/trackbacks/95885.html Erlang涓殑process鈥斺旇繘紼嬫槸杞婚噺綰х殑錛屽茍涓旇繘紼嬮棿鏃犲叡浜傛煡浜嗗緢澶氳祫鏂欙紝浼間箮娌′漢璇存竻妤氳交閲忕駭榪涚▼綆楁槸浠涔堟蹇碉紝緇х畫鏌ユ壘涓傘傘傞棽璇濅笉 鎻愶紝榪涘叆騫跺彂緙栫▼鐨勪笘鐣屻傛湰鏂囩畻鏄涔犵瑪璁幫紝涔熷彲浠ヨ鏄奀oncurrent Programming in ERLANG銆嬬浜斿紶鐨勭畝鐣ョ炕璇戙?1.榪涚▼鐨勫垱寤?/span> 榪涚▼鏄竴縐嶈嚜鍖呭惈鐨勩佸垎闅旂殑璁$畻鍗曞厓錛屽茍涓庡叾浠栬繘紼嬪茍鍙戣繍琛屽湪緋葷粺涓紝鍦ㄨ繘紼嬮棿騫舵病鏈変竴涓戶鎵夸綋緋伙紝褰撶劧錛屽簲鐢ㄥ紑鍙戣呭彲浠ヨ璁¤繖鏍蜂竴涓戶鎵夸綋緋匯?br> 榪涚▼鐨勫垱寤轟嬌鐢ㄥ涓嬭娉曪細
java 浠g爜
Pid = spawn(Module, FunctionName, ArgumentList)
spawn鎺ュ彈涓変釜鍙傛暟錛氭ā鍧楀悕錛屽嚱鏁板悕浠ュ強鍙傛暟鍒楄〃錛屽茍榪斿洖涓涓唬琛ㄥ垱寤虹殑榪涚▼鐨勬爣璇嗙錛圥id錛夈?br>濡傛灉鍦ㄤ竴涓凡鐭ヨ繘紼婸id1涓墽琛岋細
java 浠g爜
Pid2 = spawn(Mod, Func, Args)
閭d箞錛孭id2浠呬粎鑳借Pid1鍙錛孍rlang緋葷粺鐨勫畨鍏ㄦу氨鏋勫緩鍦ㄩ檺鍒惰繘紼嬫墿灞曠殑鍩虹涓娿?br>2.榪涚▼闂撮氫俊 Erlang榪涚▼闂寸殑閫氫俊鍙兘閫氳繃鍙戦佹秷鎭潵瀹炵幇錛屾秷鎭殑鍙戦佷嬌鐢?絎﹀彿錛?br>
java 浠g爜
鍏朵腑Pid鏄帴鍙楁秷鎭殑榪涚▼鏍囪絎︼紝Message灝辨槸娑堟伅銆傛帴鍙楁柟鍜屾秷鎭彲浠ユ槸浠諱綍鐨勬湁鏁堢殑Erlang緇撴瀯錛屽彧瑕佷粬浠殑緇撴灉榪斿洖鐨勬槸榪涚▼鏍囪絎﹀拰娑堟伅銆?br> 娑堟伅鐨勬帴鍙楁槸浣跨敤receive鍏抽敭瀛楋紝璇硶濡備笅錛?br>
java 浠g爜
receive
Message1 [when Guard1] ->
Actions1 ;
Message2 [when Guard2] ->
Actions2 ;
end
姣忎竴涓狤rlang榪涚▼閮芥湁涓涓?#8220;閭”錛屾墍鏈夊彂閫佸埌榪涚▼鐨勬秷鎭兘鎸夌収鍒拌揪鐨勯『搴忓瓨鍌ㄥ湪“閭”閲岋紝涓婇潰鎵紺虹殑娑堟伅Message1,Message2錛?褰撳畠浠笌“閭”閲岀殑娑堟伅鍖歸厤錛屽茍涓旂害鏉燂紙Guard錛夐氳繃錛岄偅涔堢浉搴旂殑ActionN灝嗘墽琛岋紝騫朵笖receive榪斿洖鐨勬槸ActionN鐨勬渶鍚庝竴鏉℃墽琛?璇彞鐨勭粨鏋溿侲rlang瀵?#8220;閭”閲岀殑娑堟伅鍖歸厤鏄湁閫夋嫨鎬х殑錛屽彧鏈夊尮閰嶇殑娑堟伅灝嗚瑙﹀彂鐩稿簲鐨凙ction錛岃屾病鏈夊尮閰嶇殑娑堟伅灝嗕粛鐒朵繚鐣欏湪“閭”閲屻傝繖 涓鏈哄埗淇濊瘉浜嗘病鏈夋秷鎭細闃誨鍏朵粬娑堟伅鐨勫埌杈俱?br> 娑堟伅鍒拌揪鐨勯『搴忓茍涓嶅喅瀹氭秷鎭殑浼樺厛綰э紝榪涚▼灝嗚疆嫻佹鏌?#8220;閭”閲岀殑娑堟伅榪涜灝濊瘯鍖歸厤銆傛秷鎭殑浼樺厛綰у埆涓嬫枃鍐嶈銆?br> 濡備綍鎺ュ彈鐗瑰畾榪涚▼鐨勬秷鎭憿錛熺瓟妗堝緢綆鍗曪紝灝嗗彂閫佹柟(sender)涔熼檮閫佸湪娑堟伅褰撲腑錛屾帴鏀舵柟閫氳繃妯″紡鍖歸厤鍐沖畾鏄惁鎺ュ彈錛屾瘮濡傦細
java 浠g爜
緇欒繘紼婸id鍙戦佹秷鎭瘂self(),abc}錛屽埄鐢╯elf榪囩▼寰楀埌鍙戦佹柟浣滀負娑堟伅鍙戦併傜劧鍚庢帴鏀舵柟錛?br>
java 浠g爜
receive
{Pid1,Msg} ->
end
閫氳繃妯″紡鍖歸厤鍐沖畾鍙湁Pid1榪涚▼鍙戦佺殑娑堟伅鎵嶆帴鍙椼?br>3.涓浜涗緥瀛?/span> 浠呰鏄庝笅涔︿腑璁℃暟鐨勮繘紼嬩緥瀛?鎴戞坊鍔犱簡綆鍗曟敞閲婏細
java 浠g爜
-module(counter).
-compile(export_all).
% start()錛岃繑鍥炰竴涓柊榪涚▼錛岃繘紼嬫墽琛屽嚱鏁發(fā)oop
start()->spawn(counter, loop,[0 ]).
% 璋冪敤姝ゆ搷浣滈掑璁℃暟
increment(Counter)->
Counter!increament.
% 榪斿洖褰撳墠璁℃暟鍊?nbsp;
value(Counter)->
Counter!{self(),value},
receive
{Counter,Value}->
%榪斿洖緇欒皟鐢ㄦ柟
Value
end.
%鍋滄璁℃暟
stop(Counter)->
Counter!{self(),stop}.
loop(Val)->
receive
%鎺ュ彈涓嶅悓鐨勬秷鎭紝鍐沖畾榪斿洖緇撴灉
increament->
loop(Val+1 );
{From,value}->
From!{self(),Val},
loop(Val);
stop->
true ;
%涓嶆槸浠ヤ笂3 縐嶆秷鎭紝灝辯戶緇瓑寰?nbsp;
Other->
loop(Val)
end.
璋冪敤鏂瑰紡錛?br>
java 浠g爜
1 > Counter1=counter:start().
<0.30 . 0 >
2 > counter:value(Counter1).
0
3 > counter:increment(Counter1).
increament
4 > counter:value(Counter1).
1
鍩轟簬榪涚▼鐨勬秷鎭紶閫掓満鍒跺彲浠ュ緢瀹規(guī)槗鍦板疄鐜版湁闄愮姸鎬佹満錛團SM錛夛紝鐘舵佷嬌鐢ㄥ嚱鏁拌〃紺猴紝鑰屼簨浠跺氨鏄秷鎭傚叿浣撲笉鍐嶅睍寮4.瓚呮椂璁劇疆 Erlang涓殑receive璇硶鍙互娣誨姞涓涓澶栭夐」錛歵imeout錛岀被浼鹼細
java 浠g爜
receive
Message1 [when Guard1] ->
Actions1 ;
Message2 [when Guard2] ->
Actions2 ;
after
TimeOutExpr ->
ActionsT
end
after涔嬪悗鐨凾imeOutExpr琛ㄨ揪寮忚繑鍥炰竴涓暣鏁皌ime錛堟縐掔駭鍒級錛屾椂闂寸殑綺劇‘紼嬪害渚濊禆浜嶦rlang鍦ㄦ搷浣滅郴緇熸垨鑰呯‖浠剁殑瀹炵幇銆傚鏋滃湪time姣鍐咃紝娌℃湁涓涓秷鎭閫変腑錛岃秴鏃惰緗皢鐢熸晥錛屼篃灝辨槸ActionT灝嗘墽琛屻倀ime鏈変袱涓壒孌婂鹼細 1)infinity (鏃犵┓澶?錛宨nfinity鏄竴涓猘tom錛屾寚瀹氫簡瓚呮椂璁劇疆灝嗘案榪滀笉浼氳鎵ц銆?br>2) 0 錛岃秴鏃跺鏋滆瀹氫負0鎰忓懗鐫瓚呮椂璁劇疆灝嗙珛鍒繪墽琛岋紝浣嗘槸緋葷粺灝嗛鍏堝皾璇曞綋鍓?#8220;閭”閲岀殑娑堟伅銆?br> 瓚呮椂鐨勫父瑙佸嚑涓簲鐢紝姣斿鎸傝搗褰撳墠榪涚▼澶氬皯姣錛?br>
java 浠g爜
sleep(Time) ->
receive
after Time ->
true
end.
姣斿娓呯┖榪涚▼鐨?#8220;閭”,涓㈠純“閭”閲岀殑鎵鏈夋秷鎭細
java 浠g爜
flush_buffer() ->
receive
AnyMessage ->
flush_buffer()
after 0 ->
true
end.
灝嗗綋鍓嶈繘紼嬫案榪滄寕璧鳳細
java 浠g爜
suspend() ->
receive
after
infinity ->
true
end.
瓚呮椂涔熷彲浠ュ簲鐢ㄤ簬瀹炵幇瀹氭椂鍣紝姣斿涓嬮潰榪欎釜渚嬪瓙錛屽垱寤轟竴涓繘紼嬶紝榪欎釜榪涚▼灝嗗湪璁懼畾鏃墮棿鍚庡悜鑷繁鍙戦佹秷鎭細
java 浠g爜
-module(timer).
-export([timeout/2 ,cancel/ 1 ,timer/ 3 ]).
timeout(Time, Alarm) ->
spawn(timer, timer, [self(),Time,Alarm]).
cancel(Timer) ->
Timer ! {self(),cancel}.
timer(Pid, Time, Alarm) ->
receive
{Pid,cancel} ->
true
after Time ->
Pid ! Alarm
end.
5銆佹敞鍐岃繘紼?/span> 涓轟簡緇欒繘紼嬪彂閫佹秷鎭紝鎴戜滑闇瑕佺煡閬撹繘紼嬬殑Pid錛屼絾鏄湪鏌愪簺鎯呭喌涓嬶細鍦ㄤ竴涓緢澶х郴緇熼噷闈㈡湁寰堝鐨勫叏灞servers錛屾垨鑰呬負浜嗗畨鍏ㄨ冭檻闇瑕侀殣钘忚繘紼?Pid銆備負浜嗚揪鍒板彲浠ュ彂閫佹秷鎭粰涓涓笉鐭ラ亾Pid鐨勮繘紼嬬殑鐩殑錛屾垜浠彁渚涗簡娉ㄥ唽榪涚▼鐨勫姙娉曪紝緇欒繘紼嬩滑娉ㄥ唽鍚嶅瓧錛岃繖浜涘悕瀛楀繀欏繪槸atom銆?br> 鍩烘湰鐨勮皟鐢ㄥ艦寮忥細
java 浠g爜
register(Name, Pid)
灝哊ame涓庤繘紼婸id鑱旂郴璧鋒潵
unregister(Name)
鍙栨秷Name涓庣浉搴旇繘紼嬬殑瀵瑰簲鍏崇郴銆?nbsp;
whereis(Name)
榪斿洖Name鎵鍏寵仈鐨勮繘紼嬬殑Pid錛屽鏋滄病鏈夎繘紼嬩笌涔嬪叧鑱旓紝灝辮繑鍥瀉tom:undefined
registered()
榪斿洖褰撳墠娉ㄥ唽鐨勮繘紼嬬殑鍚嶅瓧鍒楄〃
6.榪涚▼鐨勪紭鍏堢駭 璁懼畾榪涚▼鐨勪紭鍏堢駭鍙互浣跨敤BIFs:process_flag(priority, Pri) Pri鍙互鏄痭ormal銆乴ow,榛樿閮芥槸normal 浼樺厛綰ч珮鐨勮繘紼嬪皢鐩稿浣庣殑鎵ц澶氫竴鐐廣?br>7.榪涚▼緇勶紙process group) 鎵鏈夌殑ERLANG榪涚▼閮芥湁涓涓狿id涓庝竴涓粬浠叡鏈夌殑縐頒負Group Leader鐩稿叧鑱旓紝褰撲竴涓柊鐨勮繘紼嬭鍒涘緩鐨勬椂鍊欏皢琚姞鍏ュ悓涓涓繘紼嬬粍銆傛渶鍒濈殑緋葷粺榪涚▼鐨凣roup Leader灝辨槸瀹冭嚜韜紝鍥犳瀹冧篃鏄墍鏈夎鍒涘緩榪涚▼鍙婂瓙榪涚▼鐨凣roup Leader銆傝繖灝辨剰鍛崇潃Erlang鐨勮繘紼嬭緇勭粐涓轟竴媯礣ree錛屽叾涓殑鏍硅妭鐐瑰氨鏄涓涓鍒涘緩鐨勮繘紼嬨備笅闈㈢殑BIFs琚敤浜庢搷綰佃繘紼嬬粍錛?br>group_leader() 榪斿洖鎵ц榪涚▼鐨凣roup Leader鐨凱idgroup_leader(Leader, Pid) 璁劇疆榪涚▼Pid鐨凣roup Leader涓鴻繘紼嬬殑Leader 8. Erlang鐨勮繘紼嬫ā鍨嬪緢瀹規(guī)槗鍘繪瀯寤篊lient-Server鐨勬ā鍨嬶紝涔︿腑鏈変竴鑺備笓闂ㄨ璁轟簡榪欎竴鐐癸紝鐫閲嶅己璋冧簡鎺ュ彛鐨勮璁′互鍙婃娊璞″眰嬈$殑闅旂闂錛屼笉緲昏瘧浜嗐?/span>
]]> Erlang鍏ラ棬錛堜竴錛?/title> http://m.shnenglu.com/keigoliye/archive/2009/09/11/95884.html鏆楀鏁欑埗 鏆楀鏁欑埗 Fri, 11 Sep 2009 02:11:00 GMT http://m.shnenglu.com/keigoliye/archive/2009/09/11/95884.html http://m.shnenglu.com/keigoliye/comments/95884.html http://m.shnenglu.com/keigoliye/archive/2009/09/11/95884.html#Feedback 0 http://m.shnenglu.com/keigoliye/comments/commentRss/95884.html http://m.shnenglu.com/keigoliye/services/trackbacks/95884.html 璇籩rlang.org涓婇潰鐨凟rlang Course鍥涘ぉ鏁欑▼1. 鏁板瓧綾誨瀷錛岄渶瑕佹敞鎰忎袱鐐?br>1錛塀#Val琛ㄧず浠榪涘埗瀛樺偍鐨勬暟瀛梀al錛屾瘮濡?br>
ruby 浠g爜
浜?/span>榪涘埗瀛樺偍鐨?01灝辨槸10榪涘埗鐨?浜?br>2錛?Char琛ㄧず瀛楃Char鐨刟scii緙栫爜錛屾瘮濡?A琛ㄧず652. 姣旇緝闅句互緲昏瘧鐨勬蹇碘斺攁tom錛屽彲浠ョ悊瑙f垚甯擱噺錛屽畠鍙互鍖呭惈浠諱綍瀛楃錛屼互灝忓啓瀛楁瘝寮澶達紝濡傛灉涓嶆槸浠ュ皬鍐欏瓧姣嶅紑澶存垨鑰呮槸瀛楁瘝涔嬪鐨勭鍙鳳紝闇瑕佺敤鍗曞紩鍙峰寘鎷搗鏉ワ紝姣斿abc,'AB'3. 鍙︿竴涓蹇碘斺擳uple,鏈変漢緲昏瘧鎴愬厓緇勶紝鍙互鐞嗚В鎴愬畾闀挎暟緇勶紝鏄疎rlang鐨勫熀紜鏁版嵁緇撴瀯涔嬩竴錛?br>
ruby 浠g爜
8> {1,2,3,4,5}.
{1,2,3,4,5}
9> {a,b,c,1,2}.
{a,b,c,1,2}
10> size({1,2,3,a,b,c}).
6
鍐呯疆鍑芥暟size姹傞暱搴︼紝鍏冪粍鍙互宓屽鍏冪粍鎴栬呭叾浠栫粨鏋勩備笅闈㈡墍璁茬殑鍒楄〃涔熶竴鏍楓?br>4. 鍙﹀涓涓熀紜鏁版嵁緇撴瀯灝辨槸鍚勪釜璇█閮芥湁鐨刲ist錛堝垪琛級錛屽湪[]鍐呬互,闅斿紑錛屽彲浠ュ姩鎬佹敼鍙樺ぇ灝忥紝
python 浠g爜
[123, xyz]
[123, def , abc]
[{person, 'Joe', 'Armstrong'},
{person, 'Robert', 'Virding'},
{person, 'Mike', 'Williams'}
]
鍙互浣跨敤鍐呯疆鍑芥暟l(fā)ength姹傚垪琛ㄥぇ灝忋備互""鍖呭惈鐨刟scii瀛楁瘝浠h〃涓涓垪琛紝閲岄潰鐨勫厓绱犲氨鏄繖浜涘瓧姣嶇殑ascii鍊鹼紝姣斿"abc"琛ㄧず鍒楄〃[97,98,99]銆?br>5. 閫氳繃榪欎袱涓暟鎹粨鏋勫彲浠ョ粍鍚堟垚鍚勭澶嶆潅緇撴瀯錛屼笌Lisp鐨刢ons銆乴ist婕斿寲鍑哄悇縐嶇粨鏋勪竴鏍風殑濂囧銆?br>6. Erlang涓彉閲忔湁涓や釜鐗圭偣錛?br>1錛夊彉閲忓繀欏諱互澶у啓瀛楁瘝寮澶?br>2錛夊彉閲忓彧鑳界粦瀹氫竴嬈★紝鎴栬呬互涓鑸殑璇存硶灝辨槸鍙兘璧嬪間竴嬈★紝鍏跺疄Erlang騫舵病鏈夎祴鍊艱繖鏍風殑姒傚康,=鍙蜂篃鏄敤浜庨獙璇佸尮閰嶃?br>7. 妯″紡鍖歸厤鈥斺擯attern Matching錛孍rlang鐨勬ā寮忓尮閰嶉潪甯稿己澶э紝鐪嬩簡buaawhl 鐨勩?a >Erlang璇硶鎻愯 銆嬬殑浠嬬粛錛屾ā寮忓尮閰嶇殑鍔熻兘涓嶄粎浠呭湪璇劇▼涓粙緇嶇殑鏁版嵁緇撴瀯鐨勬媶瑙o紝鍦ㄧ▼搴忕殑鍒嗘淳涔熸壆婕旈噸瑕佽鑹詫紝鎴栬呰Erlang鐨勬帶鍒剁殑嫻佽漿鏄氳繃妯″紡鍖歸厤鏉ュ疄鐜扮殑銆傚叿浣撳姛鑳藉弬瑙侀摼鎺ワ紝緇欏嚭涔︿腑鎷嗚В鍒楄〃鐨勪緥瀛愶細
python 浠g爜
[A,B|C] = [1,2,3,4,5,6,7]
Succeeds - binds A = 1, B = 2,
C = [3,4,5,6,7]
[H|T] = [1,2,3,4]
Succeeds - binds H = 1, T = [2,3,4]
[H|T] = [abc]
Succeeds - binds H = abc, T = []
[H|T] = []
Fails
涓嬮潰浼氱粰鍑烘洿澶氭ā寮忓尮閰嶇殑渚嬪瓙錛岀粰鍑轟竴涓ā鍧楃敤鏉ヨ綆楀垪琛ㄧ瓑8. Erlang涓嚱鏁扮殑瀹氫箟蹇呴』鍦ㄤ竴涓ā鍧楀唴錛圡odule錛夛紝騫朵笖妯″潡鍜屽嚱鏁扮殑鍚嶇О閮藉繀欏繪槸atom錛屽嚱鏁扮殑鍙傛暟鍙互鏄換浣曠殑Erlang綾誨瀷鎴栬呮暟鎹粨鏋勶紝鍑芥暟瑕佽璋冪敤闇瑕佷粠妯″潡涓鍑猴紝鍑芥暟璋冪敤鐨勫艦寮忕被浼鹼細 moduleName:funcName(Arg1,Arg2,...). 鍐欐垜浠殑絎竴涓狤rlang紼嬪簭錛屼漢瑙佷漢鐖辯殑Hello World錛?br>
java 浠g爜
-module(helloWorld).
-export([run/1 ]).
run(Name)->
io:format("Hello World ~w~n" ,[Name]).
瀛樹負helloWorld.erl錛屽湪Erlang Shell涓墽琛岋細
java 浠g爜
2 > c(helloWorld).
{ok,helloWorld}
3 > helloWorld:run(dennis).
Hello World dennis
ok
鎵撳嵃鍑烘潵浜嗭紝鐜板湪瑙i噴涓嬬▼搴忔瀯閫狅紝
java 浠g爜
榪欎竴琛屽0鏄庝簡妯″潡helloWorld錛屽嚱鏁板繀欏誨畾涔夊湪妯″潡鍐咃紝騫朵笖妯″潡鍚嶇О蹇呴』涓庢簮鏂囦歡鍚嶇浉鍚屻?br>
java 浠g爜
鑰岃繖涓琛屽0鏄庡鍑虹殑鍑芥暟錛宺un/1鎸囩殑鏄湁涓涓弬鏁扮殑run鍑芥暟錛屽洜涓篍rlang鍏佽瀹氫箟鍚屽悕鐨勬湁涓嶅悓鍙傛暟鐨勫涓嚱鏁幫紝閫氳繃鎸囧畾/1鏉ヨ鏄庤瀵煎嚭鐨勬槸鍝釜鍑芥暟銆?br>鎺ヤ笅鏉ュ氨鏄嚱鏁板畾涔変簡錛?br>
java 浠g爜
run(Name)->
io:format("Hello World ~w~n" ,[Name]).
澶у啓寮澶寸殑鏄彉閲廚ame錛岃皟鐢╥o妯″潡鐨刦ormat鏂規(guī)硶杈撳嚭錛寏w鍙互鐞嗚В鎴愬崰浣嶇錛屽皢琚疄闄匩ame鍙栦唬錛寏n灝辨槸鎹㈣浜嗐傛敞鎰忥紝鍑芥暟瀹氫箟瀹屼簡瑕佷互鍙ュ彿.緇撴潫銆傜劧鍚庢墽琛宑(helloWorld).緙栬瘧婧愪唬鐮侊紝鎵ц錛?br>
java 浠g爜
9. 鍐呯疆鐨勫父鐢ㄥ嚱鏁幫細
java 浠g爜
date()
time()
length([1 , 2 , 3 , 4 , 5 ])
size({a,b,c})
atom_to_list(an_atom)
list_to_tuple([1 , 2 , 3 , 4 ])
integer_to_list(2234 )
tuple_to_list({})
hd([1 , 2 , 3 , 4 ]) %杈撳嚭 1 錛屼篃灝辨槸鍒楄〃鐨刪ead
tl([1 , 2 , 3 , 4 ]) %杈撳嚭[ 2 , 3 , 4 ],涔熷氨鏄垪琛ㄧ殑tail
10. 甯歌Shell鍛戒護錛?br>1錛?span style="FONT-WEIGHT: bold">h(). 鐢ㄦ潵鎵撳嵃鏈榪戠殑20鏉″巻鍙插懡浠?br>2錛?span style="FONT-WEIGHT: bold">b(). 鏌ョ湅鎵鏈夌粦瀹氱殑鍙橀噺 3) f(). 鍙栨秷錛堥仐蹇橈級鎵鏈夌粦瀹氱殑鍙橀噺銆?br>4) f(Val). 鍙栨秷鎸囧畾鐨勭粦瀹氬彉閲?br>5) e(n). 鎵ц絎琻鏉″巻鍙插懡浠?br>6) e(-1). 鎵ц涓婁竴鏉hell鍛戒護11. 鍙堜竴涓笉鐭ラ亾鎬庝箞緲昏瘧鐨勬蹇碘斺擥uard銆傜炕璇戞垚綰︽潫錛熷懙鍛點傜敤浜庨檺鍒跺彉閲忕殑綾誨瀷鍜岃寖鍥達紝姣斿錛?br>
java 浠g爜
number(X) - X 鏄暟瀛?nbsp;
integer(X) - X 鏄暣鏁?nbsp;
float (X) - X 鏄誕鐐規(guī)暟
atom(X) - X 鏄竴涓猘tom
tuple(X) - X 鏄竴涓厓緇?nbsp;
list(X) - X 鏄竴涓垪琛?nbsp;
length(X) == 3 - X 鏄竴涓暱搴︿負 3 鐨勫垪琛?nbsp;
size(X) == 2 - X 鏄竴涓暱搴︿負 2 鐨勫厓緇?nbsp;
X > Y + Z - X >Y+Z
X == Y - X 涓嶻鐩哥瓑
X =:= Y - X 鍏ㄧ瓑浜嶻
(姣斿錛?nbsp;1 == 1.0 鎴愬姛
1 =:= 1.0 澶辮觸)
涓轟簡鏂逛究姣旇緝錛孍rlang瑙勫畾濡備笅鐨勬瘮杈冮『搴忥細
java 浠g爜
number < atom < reference < port < pid < tuple < list
12. 蹇樹簡浠嬬粛apply鍑芥暟錛岃繖涓嚱鏁板浜庣啛鎮(zhèn)塲avascript鐨勪漢鏉ヨ寰堜翰鍒囷紝javascript瀹炵幇mixin灝卞緱闈犲畠錛屽畠鐨勮皟鐢ㄦ柟寮忓涓嬶細
apply(Mod, Func, Args),涓変釜鍙傛暟鍒嗗埆鏄ā鍧椼佸嚱鏁頒互鍙婂弬鏁板垪琛紝姣斿璋冪敤鎴戜滑鐨勭涓涓狤rlang紼嬪簭錛?br>
java 浠g爜
apply(helloWorld,run,[dennis]).
13. if鍜宑ase璇彞錛宨f璇彞鐨勭粨鏋勫涓嬶細
java 浠g爜
if
Guard1 ->
Sequence1 ;
Guard2 ->
Sequence2 ;
...
end
鑰宑ase璇彞鐨勭粨鏋勫涓嬶細
java 浠g爜
case Expr of
Pattern1 [when Guard1] -> Seq1;
Pattern2 [when Guard2] -> Seq2;
PatternN [when GuardN] -> SeqN
end
if鍜宑ase璇彞閮芥湁涓涓棶棰橈紝灝辨槸褰撴病鏈夋ā寮忓尮閰嶆垨鑰匞rard閮芥槸false鐨勬椂鍊欎細瀵艱嚧error錛岃繖涓棶棰榗ase鍙互澧炲姞涓涓被浼糺ava涓璬efault鐨勶細
java 浠g爜
閫氳繃_鎸囦唬浠繪剰鐨凟xpr錛岃繑鍥瀟rue,鑰宨f鍙互榪欐牱錛?br>
java 浠g爜
涓鏍風殑閬撶悊銆俢ase璇彞鍙︿竴涓渶瑕佹敞鎰忕殑闂灝辨槸鍙橀噺鑼冨洿錛屾瘡涓猚ase鍒嗘敮涓畾涔夌殑鍙橀噺閮藉皢榛樿瀵煎嚭case璇彞錛屼篃灝辨槸鍦╟ase璇彞緇撴潫鍚庡彲浠ヨ寮曠敤錛屽洜姝や竴涓鍒欏氨鏄瘡涓猚ase鍒嗘敮瀹氫箟鐨勫彉閲忓簲璇ヤ竴鑷達紝涓嶇劧綆楁槸闈炴硶鐨勶紝緙栬瘧鍣ㄤ細緇欏嚭璀﹀憡錛屾瘮濡傦細
java 浠g爜
f(X) ->
case g(X) of
true -> A = h(X), B = A + 7 ;
false -> B = 6
end,
h(A).
濡傛灉鎵цtrue鍒嗘敮錛屽彉閲廇鍜屽彉閲廈閮借瀹氫箟錛岃屽鏋滄墽琛岀殑false鍒嗘敮錛屽彧鏈夊彉閲廈琚紩鐢紝鍙湪case璇彞鎵ц鍚庯紝h(A)璋冪敤浜嗗彉閲廇錛岃繖鏄笉瀹夊叏鐨勶紝鍥犱負鍙橀噺A瀹屽叏鍙兘娌℃湁琚畾涔夛紝緙栬瘧鍣ㄥ皢緇欏嚭璀﹀憡variable 'A' unsafe in 'case' (line 10) 14. 緇欏嚭涓浜涚◢寰鏉傜殑妯″瀷鍖歸厤渚嬪瓙錛屾瘮濡傜敤浜庤綆楁暟瀛楀垪琛ㄧ殑鍜屻佸鉤鍧囧箋侀暱搴︺佹煡鎵炬煇鍏冪礌鏄惁鍦ㄥ垪琛ㄤ腑錛屾垜浠妸榪欎釜妯″潡瀹氫箟涓簂ist:
java 浠g爜
-module(list).
-export([average/1 ,sum/ 1 ,len/ 1 , double / 1 ,member/ 2 ]).
average(X)->sum(X)/len(X).
sum([H|T]) when number(H)->H+sum(T);
sum([])->0 .
len([_|T])->1 +len(T);
len([])->0 .
double ([H|T]) -> [ 2 *H| double (T)];
double ([]) -> [].
member(H, [H|_]) -> true ;
member(H, [_|T]) -> member(H, T);
member(_, []) -> false .
緇嗙粏浣撲細錛屽埄鐢ㄩ掑綊鏉ュ疄鐜幫紝姣旇緝鏈夎叮銆俖鐢ㄤ簬鎸囦唬浠繪剰鐨勫彉閲忥紝褰撴垜浠彧鍏蟲敞姝ゅ鏈夊彉閲忥紝浣嗗茍涓嶅叧蹇冨彉閲忕殑鍊肩殑鏃跺欎嬌鐢ㄣ傜敤鍒嗗彿;鏉ヨ鏄庢槸鍚屼竴涓嚱鏁板畾涔夛紝鍙槸涓嶅悓鐨勫畾涔夊垎鏀紝閫氳繃妯″紡鍖歸厤鏉ュ喅瀹氳皟鐢ㄥ摢涓嚱鏁板畾涔夊垎鏀?br>鍙︿竴涓緥瀛愶紝璁$畻鍚勭鍥懼艦鐨勯潰縐紝涔熸槸璇劇▼涓粰鍑虹殑渚嬪瓙錛?br>
java 浠g爜
-module(mathStuff).
-export([factorial/1 ,area/ 1 ]).
factorial(0 )-> 1 ;
factorial(N) when N>0 ->N*factorial(N- 1 ).
%璁$畻姝f柟褰㈤潰縐紝鍙傛暟鍏冪粍鐨勭涓涓尮閰峴quare
area({square, Side}) ->
Side * Side;
%璁$畻鍦嗙殑闈㈢Н錛屽尮閰峜ircle
area({circle, Radius}) ->
% almost :-)
3 * Radius * Radius;
%璁$畻涓夎褰㈢殑闈㈢Н錛屽埄鐢ㄦ搗浼﹀叕寮忥紝鍖歸厤triangle
area({triangle, A, B, C}) ->
S = (A + B + C)/2 ,
math:sqrt(S*(S-A)*(S-B)*(S-C));
%鍏朵粬
area(Other) ->
{invalid_object, Other}.
鎵ц涓涓嬬湅鐪嬶細
java 浠g爜
1 > c(mathStuff).
{ok,mathStuff}
2 > mathStuff:area({square, 2 }).
4
3 > mathStuff:area({circle, 2 }).
12
4 > mathStuff:area({triangle, 2 , 3 , 4 }).
2.90474
5 > mathStuff:area({other, 2 , 3 , 4 }).
{invalid_object,{other,2 , 3 , 4 }}
Erlang浣跨敤%寮濮嬪崟琛屾敞閲娿?br>
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
久久久久九九九 |
久久免费观看视频 |
欧美亚洲日本国产 |
亚洲欧美色婷婷 |
欧美综合激情网 |
老鸭窝91久久精品色噜噜导演 |
欧美一区二区精品在线 |
久久精品国产2020观看福利 |
久久久人成影片一区二区三区 |
久久久欧美精品sm网站 |
欧美国产三级 |
国产精品视频久久 |
亚洲激情亚洲 |
久久精品国产99国产精品澳门 |
美女黄毛**国产精品啪啪
|
国产精品一区亚洲 |
国语自产在线不卡 |
亚洲香蕉伊综合在人在线视看 |
亚洲欧美日韩在线一区 |
欧美国产在线观看 |
亚洲欧美日本国产专区一区 |
国产精品99久久久久久人 |
欧美一区二区精品久久911 |
亚洲国产精品一区二区www在线
|
久久天天躁狠狠躁夜夜爽蜜月 |
亚洲激情校园春色 |
欧美极品一区 |
亚洲黄色成人 |
免费亚洲一区二区 |
久久国产精品99国产精 |
国产亚洲一级高清 |
久久影院亚洲 |
久久久97精品 |
亚洲激情一区二区 |
亚洲激情偷拍 |
欧美日韩一区在线视频 |
亚洲性图久久 |
亚洲欧美一区二区三区极速播放 |
国产精品入口 |
久久久亚洲高清 |
免费亚洲电影 |
亚洲欧美韩国 |
久久精视频免费在线久久完整在线看 |
国产在线成人 |
亚洲人成网站777色婷婷 |
久久综合九色 |
欧美日韩国产在线一区 |
欧美亚洲免费电影 |
久久亚洲欧美 |
亚洲欧美日韩久久精品 |
久久影院午夜论 |
欧美一区二区三区四区在线观看地址 |
久久久久久久综合日本 |
一本一道久久综合狠狠老精东影业
|
欧美激情国产日韩 |
亚洲综合色噜噜狠狠 |
久久er精品视频 |
宅男精品视频 |
毛片一区二区三区 |
久久久久久999 |
国产精品多人 |
日韩视频一区二区三区 |
亚洲国产婷婷综合在线精品 |
一本一本久久 |
亚洲天堂男人 |
欧美日韩午夜视频在线观看 |
久久久精彩视频 |
国产香蕉97碰碰久久人人 |
亚洲欧美精品伊人久久 |
一区二区三区精品视频 |
欧美精品一区二区高清在线观看 |
久久蜜桃香蕉精品一区二区三区 |
国产精品视频网 |
午夜久久电影网 |
久久99伊人 |
伊人狠狠色j香婷婷综合 |
午夜一区二区三区在线观看 |
午夜在线精品 |
国产一区二区三区精品欧美日韩一区二区三区
|
国模叶桐国产精品一区 |
亚洲在线一区二区 |
国产精品成人午夜 |
亚洲午夜精品17c |
欧美呦呦网站 |
亚洲精品乱码久久久久久黑人 |
欧美不卡三区 |
午夜国产欧美理论在线播放 |
噜噜噜久久亚洲精品国产品小说 |
激情自拍一区 |
欧美性色视频在线 |
久久久噜噜噜久噜久久 |
亚洲精选久久 |
欧美成人自拍 |
欧美制服丝袜 |
一区二区三区精品国产 |
国产一级一区二区 |
欧美三区不卡 |
欧美大片va欧美在线播放 |
亚洲欧美高清 |
在线中文字幕不卡 |
亚洲精品国产精品国自产观看浪潮
|
国产日韩精品视频一区 |
欧美日韩精品久久 |
久久久久久久综合日本 |
中日韩男男gay无套 |
亚洲国产婷婷综合在线精品 |
久久精品视频免费观看 |
午夜在线成人av |
午夜久久tv |
国内外成人免费视频 |
国产精品一区亚洲 |
一区免费视频 |
在线中文字幕日韩 |
一区二区三区视频免费在线观看 |
99视频日韩 |
午夜精品一区二区三区在线 |
久久亚洲欧美 |
久久xxxx精品视频 |
欧美另类一区 |
另类天堂av |
亚洲国产高潮在线观看 |
正在播放欧美视频 |
免费成人av在线看 |
亚洲男同1069视频 |
欧美日韩国产高清视频 |
国语自产偷拍精品视频偷 |
中文在线不卡视频 |
亚洲黄色片网站 |
亚洲欧美国产视频 |
久久久久国产精品一区 |
国产精品卡一卡二 |
日韩亚洲欧美中文三级 |
久久久久久69 |
午夜精品一区二区三区在线视
|
久久不射2019中文字幕 |
免费欧美高清视频 |
欧美永久精品 |
国产精品日韩在线一区 |
午夜精品久久久 |
欧美专区日韩专区 |
91久久亚洲 |
欧美一级精品大片 |
在线综合视频 |
国产精品国产三级国产专区53 |
亚洲电影第三页 |
免费人成精品欧美精品 |
一道本一区二区 |
欧美日韩一区二区三区 |
制服丝袜激情欧洲亚洲 |
亚洲激情视频网 |
欧美精品日韩精品 |
亚洲综合日本 |
亚洲欧美在线x视频 |
国产日韩一区欧美 |
久久九九久久九九 |
久久精品一区四区 |
亚洲电影免费在线观看 |
欧美福利一区二区 |
欧美日韩一区二区在线播放 |
亚洲天堂av高清 |
亚洲伊人色欲综合网 |
麻豆精品在线播放 |
免费91麻豆精品国产自产在线观看 |
国产乱理伦片在线观看夜一区 |
久久成人精品视频 |
蜜桃av噜噜一区 |
一本色道久久综合 |
久久er精品视频 |
一二三四社区欧美黄 |
香蕉久久国产 |
99亚洲视频 |
久久亚洲精品视频 |
久久久国产一区二区 |
欧美精品导航 |
久久在线免费观看视频 |
国产精品一区=区 |
最新国产成人在线观看 |
国产欧美日韩不卡 |
日韩小视频在线观看 |
亚洲成在线观看 |
香蕉久久久久久久av网站 |
宅男精品视频 |
欧美另类高清视频在线 |
欧美1区免费 |
国产一区二区日韩精品欧美精品 |
亚洲免费av片 |
亚洲视频1区 |
欧美日韩一区二区视频在线 |
亚洲国产日韩欧美在线动漫 |
亚洲高清在线 |
欧美大胆a视频 |
夜久久久久久 |
午夜久久一区 |
黄色亚洲精品 |
久久久综合网站 |
亚洲高清免费视频 |
99国产精品久久久久久久成人热 |
欧美高清视频免费观看 |
亚洲欧洲在线看 |
亚洲一区二区久久 |