ThreadvsProcess,ParallelvsConcurrent鍦ㄤ竴涓▼搴忎腑锛屽彲浠ユ湁澶氫釜杩涚▼銆傚湪涓€涓繘绋嬩腑锛屼篃鍙互鏈夊涓嚎绋嬨€傝繘绋嬮棿涓嶅叡浜唴瀛橈紝浣嗗彲浠ュ湪绾跨▼闂村叡浜€傞€氳繃涓嬪浘锛屽ぇ瀹跺彲浠ユ湁鏇寸洿瑙傜殑璁よ瘑銆傚苟鍙戞槸涓€涓换鍔″湪鍚屼竴鏃堕棿娈垫墽琛岋紝鑰屽苟琛屾槸涓や釜浠诲姟鍚屾椂鎵ц銆傞櫎闈炴槸澶氭牳CPU锛屽鏋滃彧鏈変竴涓狢PU锛屽绾跨▼鏈韩涓嶆敮鎸佸苟琛岋紝鍙兘閫氳繃绾跨▼闂寸殑鍒囨崲鏉ュ疄鐜般€備粠涓嬪浘鍙互瀵瑰苟鍙戝拰骞惰鏈夋洿鐩磋鐨勮璇嗐€傚墠鍚庣璇█濡備綍鏀寔绾跨▼骞惰寮€鍙戯紵鍗曚粠璇█鐨勮搴︽潵鐪嬶紝JavaScript鏈韩骞舵病鏈夌嚎绋嬭鑼冿紝涔熸病鏈夊唴缃帴鍙f毚闇茬粰寮€鍙戣€呭垱寤虹嚎绋嬨€傛墍浠avaScript鏈韩鐨勬墽琛屾槸鍗曠嚎绋嬬殑銆傚湪iOS銆丄ndroid銆乽nity鐨勫紑鍙戜腑锛屽紑鍙戣€呮湁GradeCentralDispatch銆乄orkManager銆丣obSystem杩欎簺鏀寔骞惰寮€鍙戠殑寮哄ぇ宸ュ叿鍖呫€傝繖浜涜瑷€涔嬫墍浠ヤ笉浠呮敮鎸佸绾跨▼锛岃繕鏂逛究骞惰寮€鍙戙€傚氨鏄洜涓虹敤杩欎簺璇█缂栧啓鐨勭▼搴忎笌鍓嶇鐢ㄦ埛鏈夋繁鍏ョ殑浜や簰銆傚拰鍓嶇涓嶅悓鐨勬槸锛屽湪寰堝鍚庣鐨勯珮绾ц瑷€涓紝姣斿Ruby鎴栬€匬ython锛屾棤璁篊PU鏄崟鏍歌繕鏄鏍革紝绾跨▼閮藉彈鍒板叏灞€瑙i噴鍣ㄩ攣锛圙IL锛実lobal瑙i噴鍣ㄩ攣锛夛紝骞朵笖鍙敮鎸佸苟鍙戙€侸avaScript涓殑澶氱嚎绋嬪苟琛屽紑鍙戜粠涓婇潰鐨勪緥瀛愭垜浠彲浠ョ湅鍑猴紝鍓嶇璇█瀵圭嚎绋嬪拰骞惰鎬х殑鏀寔鏅亶浼樹簬鍚庣銆侸avaScript铏界劧鑷甫鍑芥暟寮忕紪绋嬫敮鎸侊紝杩戝勾寮哄寲浜嗗搷搴斿紡缂栫▼鐨勮璁℃€濇兂锛屼絾鍦ㄥ绾跨▼銆佸苟琛屽紑鍙戠殑鑳藉姏涓婅繕鏄湁鎵€娆犵己锛屼絾杩欏苟涓嶄唬琛ㄥ绾跨▼鍦ㄥ墠绔畬鍏ㄦ病鏈夎兘鍔涚粨灏俱€傚畬鎴愩€侸avaScript涓殑寮傛鍥犱负杩戝勾鏉ワ紝JavaScript涓墍璋撶殑鈥滃浠诲姟澶勭悊鈥濆ぇ澶氭槸閫氳繃灏嗕换鍔℃媶鍒嗕负浠诲姟鍗曞厓鏉ュ紓姝ユ墽琛岀殑銆傝繖浜涗笉鍚岀殑浠诲姟鍙互鐪嬩綔鏄煇绉嶁€滃苟鍙戔€濄€傝繖閲岀殑浠诲姟鎷嗗垎灏辨槸閫氳繃鎴戜滑涓婁竴鑺傛彁鍒扮殑浜嬩欢鍥炶皟callback鍜宲romise锛屽皢浠诲姟鎷嗗垎鎴愬紓姝ョ殑浠诲姟鍗曞厓銆傚湪寮傛鍦烘櫙涓嬶紝涓€娆″彧鏈変竴涓皟鐢ㄦ爤銆備簨浠跺洖璋僣allback銆乸romise銆乤wait銆乽serevent鍜宼imeout閮介噰鐢ㄤ簡浠诲姟鎷嗗垎鐨勫師鍒欍€備篃灏辨槸璇村彧鏈変竴鏉avaScript鎸囦护缁撴潫鍚庯紝鎵嶈兘鎵ц涓嬩竴鏉℃寚浠わ紝鎵€浠ュ紓姝ヤ篃鏄湁浠d环鐨勶紝璇磖esponse鍜宲rogressive杩樻槸涓茶鎿嶄綔鐨勶紝涓嶆槸骞惰鐨勩€侸avaScript涓殑WebWorkers鏀寔骞惰WebWorkers銆傚畠鍙互鎵撶牬甯у悓姝ワ紝鍏佽鎴戜滑鍦ㄤ笌涓荤嚎绋嬪苟琛岀殑宸ヤ綔绾跨▼涓婃墽琛屽叾浠栨寚浠ゃ€?鎴戜滑鎵€鐭ラ亾鐨凜hrome銆丼afari銆丗ireFox绛夋祻瑙堝櫒閮芥湁鑷繁鐨勮櫄鎷熸満鏉ュ疄鐜癑avaScript銆傝繖鍜屾垜浠湪鍓嶇浣跨敤鐨勬枃浠剁郴缁熴€佺綉缁溿€乻etTimeout銆乨evice绛夊姛鑳戒竴鏍凤紝閮芥槸鐢辩幆澧冧腑宓屽叆鐨凬ode鎴栨祻瑙堝櫒铏氭嫙鏈烘彁渚涚殑锛岃€屼笉鏄敱璇█鏈韩鎻愪緵鐨勩€傛墍浠ュ绾跨▼鐨勬帴鍙d篃鏄竴鏍凤紝娴忚鍣ㄤ篃鎻愪緵浜嗐€傛祻瑙堝櫒鎴栬櫄鎷熸満鎻愪緵鐨勫绾跨▼API灏辨槸WebWorker銆傚垱寤轰竴涓猈ebWorker闈炲父绠€鍗曪紝鎴戜滑鍙渶瑕佸儚涓嬮潰杩欐牱鐨勪竴涓猲ew璇彞銆傚悗闈㈠鏋渕ain.js鍜寃orker.js涔嬮棿鍙互閫氳繃postMessage浼犻€掍俊鎭紝鍙屾柟涔熷彲浠ラ€氳繃onMessage鎺ユ敹瀵规柟鐨勬秷鎭€?//main.jsvarworker=newWorker('worker.js');worker.postMessage('Helloworld');worker.onmessage=(msg)=>{console.log('messagefromworker',msg.data);}//worker.jsself.onmessage=(msg)=>{postMessage('宸ヤ汉鍙戦€佺殑娑堟伅');console.log('messagefrommain',msg.data);}鍦↗avaScript涓紝鏈夊嚑绉嶄笉鍚岀殑worker绾跨▼锛屽垎鍒槸dedicatedworker銆乻haredworker鍜宻erviceworker銆傛垜浠彲浠ュ垎鍒潵鐪嬩粬浠殑浣滅敤銆傝繖閲屾垜浠厛鐪嬬湅涓撶敤鐨剋orker銆備竴鍚嶄笓鑱屽伐浣滆€呭彧鑳藉湪涓€涓鍩熶娇鐢ㄣ€傚畠涔熷彲浠ユ湁寰堝灞傜骇锛屼絾鏄鏋滃眰绾уお澶氾紝鍙兘浼氶€犳垚閫昏緫娣蜂贡锛屾墍浠ュ湪浣跨敤鐨勬椂鍊欒娉ㄦ剰涓€涓嬨€備笌dedicatedworker鐩稿鐨勬槸sharedworker銆傞【鍚嶆€濅箟锛屽鏋渄edicated鏄痚xclusive锛岄偅涔坰hared灏辨槸shareable锛屾墍浠haredworker鍙互琚笉鍚岀殑tabs銆乮frame鍜寃orkers璁块棶銆備絾鍏变韩宸ヤ綔鑰呭苟闈炴病鏈夐檺鍒躲€傚畠鐨勫眬闄愭€у湪浜庡畠鍙兘琚繍琛屽湪鍚屾簮涓婄殑JavaScript璁块棶銆俿erviceworker锛屾棦鐒跺彨鏈嶅姟锛屽氨璺熷悗绔湁鍏炽€傚畠鐨勭壒鐐规槸鍗充娇鍓嶇椤甸潰鍏抽棴涔熻兘杩愯銆備俊鎭紶杈撴ā寮忕殑缁撴瀯鍖栧鍒剁畻娉曢噰鐢ㄥ厛澶嶅埗鍚庝紶杈撶殑鏂规硶銆傝繖閲屼娇鐢ㄧ殑涓€绉嶅鍒剁畻娉曠被浼间簬鎴戜滑涔嬪墠鎻愬埌鐨勬繁鎷疯礉锛屼篃鍙粨鏋勫寲鍏嬮殕銆傝姹傚弽棣堟柟寮忓綋鎴戜滑瑕佷紶閫掓瘮杈冨鏉傜殑鏁版嵁缁撴瀯鏃讹紝姣斿鎴戜滑闇€瑕佷紶閫掍竴涓儚涓嬮潰杩欐牱鐨勫甫鍙傛暟鐨勫嚱鏁拌皟鐢紝杩欐椂鍊欐垜浠渶瑕佸厛鎶婂嚱鏁拌皟鐢ㄨ浆鎹㈡垚涓€涓簭鍒楋紝鍗砤瀵瑰簲鎴戜滑鐨勬湰鍦拌皟鐢ㄨ繙绋嬭繃绋嬭皟鐢紝绉颁负PRC锛圧emoteProcedureCall锛夈€傚熀浜巔ostMessage鐨勫紓姝ョ壒鎬э紝瀹冭繑鍥炵殑涓嶆槸缁撴灉锛岃€屾槸绛夊緟鐨刾romise銆俰sOdd(3);is_odd|num:3worker.postMessage('is_odd|num:3');worker.postMessage('is_odd|num:5');worker.onmessage=(result)=>{//'true'//'閿欒鐨?};缁撴瀯鍖栧鍒剁畻娉曟敮鎸侀櫎Symbol涔嬪鐨勫叾浠栫被鍨嬬殑鍘熷鏁版嵁锛屽寘鎷珺oolean銆乶ull銆乽ndefined銆乶umbers銆丅igInt鍜屾垜浠娇鐢ㄧ殑string銆傜粨鏋勫寲澶嶅埗绠楁硶杩樺彲浠ユ敮鎸佸绉嶆暟鎹粨鏋勶紝鍖呮嫭鏁扮粍銆佸瓧鍏稿拰闆嗗悎銆備絾鏄嚱鏁帮紙function锛夊拰锛坈lass锛夌被涓嶈兘閫氳繃postMessage浼犻€掋€傚懡浠ゅ拰璋冨害妯″紡瀹炵幇浜嗗紑鍙戜汉鍛樺疄鐜扮殑閫昏緫锛屼互纭繚鍛戒护璋冨害绉颁负鍛戒护璋冨害绋嬪簭妯″紡銆倂arcommands={isOdd(num){/*...*/},isEven(num){/*...*/}};functiondispatch(method,args){濡傛灉(commands.hasOwnProperty(method)){returncommands[method](...args);}//...}鏈枃鏄?鏈圖ay7鐨勫涔犵瑪璁帮紝鍐呭鏉ヨ嚜鏋佸鏃堕棿銆奐vascript杩涢樁瀹炴垬璇俱€嬶紝涓€璧疯繘姝ヰ煉煉?/p>
