# encoding: utf-8 __author__ = 'zhanghe' import time import threading # åå®è¿æ¯ä½ çé¶è¡å款: balance = 0 lock = threading.Lock() def change_it(n): # å åååï¼ç»æåºè¯¥ä¸º0: global balance balance = balance + n balance = balance - n def run_thread(n): for i in range(100000): change_it(n) def run_thread_lock(n): for i in range(100000): # å è¦è·åé: lock.acquire() try: # æ¾å¿å°æ¹å§: change_it(n) finally: # æ¹å®äºä¸å®è¦éæ¾é: lock.release() def run_without_lock(): """ ä¸å¸¦éç主ç¨åº :return: """ start_time = time.time() t1 = threading.Thread(target=run_thread, args=(5,)) t2 = threading.Thread(target=run_thread, args=(8,)) t1.start() t2.start() t1.join() t2.join() end_time = time.time() print end_time - start_time print balance def run_with_lock(): """ 带éç主ç¨åº :return: """ start_time = time.time() t1 = threading.Thread(target=run_thread_lock, args=(5,)) t2 = threading.Thread(target=run_thread_lock, args=(8,)) t1.start() t2.start() t1.join() t2.join() end_time = time.time() print end_time - start_time print balance if __name__ == '__main__': # è¿æ¯é¶è¡è´¦æ·ä¿®æ¹çç®åä¾åï¼ä»¥ä¸å嫿µè¯ä¸å éä¸å éçè¿è¡æ åµ run_without_lock() # run_with_lock() ''' run_without_lock()è¿è¡ç»æï¼ 0.209647893906 8ï¼ä¸åºå®ï¼ run_with_lock()è¿è¡ç»æï¼ 0.441839933395 0 å¯ä»¥çåºï¼å¨æå ¨å±åéçæ åµä¸ï¼éè¦ç¨éæºå¶é²æ¢ä¿®æ¹è¿ç¨ä¸çå²çª è¿æ ·ä¸æ¥ï¼å å«éçææ®µä»£ç å®é ä¸åªè½ä»¥åçº¿ç¨æ¨¡å¼æ§è¡ï¼æç就大大å°ä¸éäºã Pythonè§£éå¨ç±äºè®¾è®¡æ¶æGILå ¨å±éï¼å¯¼è´äºå¤çº¿ç¨æ æ³å©ç¨å¤æ ¸ã å¤çº¿ç¨çå¹¶åå¨Pythonä¸å°±æ¯ä¸ä¸ªç¾ä¸½ç梦ã å¤çº¿ç¨å¨Pythonä¸åªè½äº¤æ¿æ§è¡ï¼å³ä½¿100个线ç¨è·å¨100æ ¸CPUä¸ï¼ä¹åªè½ç¨å°1ä¸ªæ ¸ã Pythonè½ç¶ä¸è½å©ç¨å¤çº¿ç¨å®ç°å¤æ ¸ä»»å¡ï¼ä½å¯ä»¥éè¿å¤è¿ç¨å®ç°å¤æ ¸ä»»å¡ã å¤ä¸ªPythonè¿ç¨æåèªç¬ç«çGILéï¼äºä¸å½±åã æ·±å ¥åæï¼ ä¸ä¸ªä»»å¡å¨æ§è¡çè¿ç¨ä¸å¤§é¨åæ¶é´é½å¨çå¾ IOæä½ï¼ åè¿ç¨åçº¿ç¨æ¨¡åä¼å¯¼è´å«ç任塿 æ³å¹¶è¡æ§è¡ï¼ å æ¤ï¼æä»¬æéè¦å¤è¿ç¨æ¨¡åæè å¤çº¿ç¨æ¨¡åæ¥æ¯æå¤ä»»å¡å¹¶åæ§è¡ã ç°ä»£æä½ç³»ç»å¯¹IOæä½å·²ç»åäºå·¨å¤§çæ¹è¿ï¼æå¤§çç¹ç¹å°±æ¯æ¯æå¼æ¥IO 妿å åå©ç¨æä½ç³»ç»æä¾ç弿¥IOæ¯æï¼å°±å¯ä»¥ç¨åè¿ç¨åçº¿ç¨æ¨¡åæ¥æ§è¡å¤ä»»å¡ï¼ è¿ç§å ¨æ°ç模å称为äºä»¶é©±å¨æ¨¡åï¼Nginxå°±æ¯æ¯æå¼æ¥IOçWebæå¡å¨ï¼ å®å¨åæ ¸CPUä¸éç¨åè¿ç¨æ¨¡åå°±å¯ä»¥é«æå°æ¯æå¤ä»»å¡ã å¨å¤æ ¸CPUä¸ï¼å¯ä»¥è¿è¡å¤ä¸ªè¿ç¨ï¼æ°éä¸CPUæ ¸å¿æ°ç¸åï¼ï¼å åå©ç¨å¤æ ¸CPUã ç±äºç³»ç»æ»çè¿ç¨æ°éååæéï¼å æ¤æä½ç³»ç»è°åº¦é叏髿ã å¤çå¤ä»»å¡æ¨èçåæ³æ¯ï¼ å¤è¿ç¨ + åç¨ '''