èä½æå½ä½è
ææãåä¸è½¬è½½è¯·èç³»ä½è
è·å¾ææï¼éåä¸è½¬è½½è¯·æ³¨æåºå¤ã
ç®åå°è¯´å°±æ¯ä½ä¸ºå¯è½æ¯ä»
æçæ¯æå¤çº¿ç¨ç解éåè¯è¨ï¼perlçå¤çº¿ç¨æ¯æ®ç¾ï¼PHP没æå¤çº¿ç¨ï¼ï¼Pythonçå¤çº¿ç¨æ¯æcompromiseçï¼å¨ä»»ææ¶é´åªæä¸ä¸ªPython解éå¨å¨è§£éPython bytecodeã
UPDATEï¼å¦è¯è®ºæåºï¼Rubyä¹æ¯æthreadæ¯æçï¼èä¸è³å°Ruby MRIæ¯æGILçã
å¦æä½ ç代ç æ¯CPUå¯éåï¼å¤ä¸ªçº¿ç¨ç代ç å¾æå¯è½æ¯çº¿æ§æ§è¡çãæ以è¿ç§æ
åµä¸å¤çº¿ç¨æ¯é¸¡èï¼æçå¯è½è¿ä¸å¦å线ç¨å 为æcontext switch
ä½æ¯ï¼å¦æä½ ç代ç æ¯IOå¯éåï¼å¤çº¿ç¨å¯ä»¥ææ¾æé«æçãä¾å¦å¶ä½ç¬è«ï¼æå°±ä¸æç½ä¸ºä»ä¹Pythonæ»åç¬è«èç³»å¨ä¸èµ·â¦ä¸è¿ä¹åªæ³èµ·æ¥è¿ä¸ªä¾åâ¦ï¼ï¼ç»å¤§å¤æ°æ¶é´ç¬è«æ¯å¨çå¾
socketè¿åæ°æ®ãè¿ä¸ªæ¶åC代ç éæ¯ærelease GILçï¼æç»ç»ææ¯æ个线ç¨çå¾
IOçæ¶åå
¶ä»çº¿ç¨å¯ä»¥ç»§ç»æ§è¡ã
åè¿æ¥è®²ï¼ä½ å°±ä¸åºè¯¥ç¨PythonåCPUå¯éåç代ç â¦æçæå¨é£éâ¦
å¦æç¡®å®éè¦å¨CPUå¯éåç代ç éç¨concurrentï¼å°±å»ç¨multiprocessingåºãè¿ä¸ªåºæ¯åºäºmulti processå®ç°äºç±»multi threadçAPIæ¥å£ï¼å¹¶ä¸ç¨pickleé¨åå°å®ç°äºåéå
±äº«ã
åå ä¸æ¡ï¼å¦æä½ ä¸ç¥éä½ ç代ç å°åºç®CPUå¯éåè¿æ¯IOå¯éåï¼æä½ ä¸ªæ¹æ³ï¼
multiprocessingè¿ä¸ªmoduleæä¸ä¸ªdummyçsub moduleï¼å®æ¯åºäºmultithreadå®ç°äºmultiprocessingçAPIã
åè®¾ä½ ä½¿ç¨çæ¯multiprocessingçPoolï¼æ¯ä½¿ç¨å¤è¿ç¨å®ç°äºconcurrency
from multiprocessing import Pool
å¦ææè¿ä¸ªä»£ç æ¹æä¸é¢è¿æ ·ï¼å°±åæå¤çº¿ç¨å®ç°concurrency
from multiprocessing.dummy import Pool
两ç§æ¹å¼é½è·ä¸ä¸ï¼åªä¸ªé度快ç¨åªä¸ªå°±è¡äºã
UPDATE:
ååæåç°concurrent.futuresè¿ä¸ªä¸è¥¿ï¼å
å«ThreadPoolExecutoråProcessPoolExecutorï¼å¯è½æ¯multiprocessingæ´ç®å
温馨提示:答案为网友推荐,仅供参考