Python性能分析與優化,GIL
什麼是CPython GTL
- CPython解釋器內存管理並不是是線程安全的
- 保護多線程情況下對Python對象的訪問
- CPython使用簡單的鎖機制避免了多個線程同時執行字節碼
GIL的影響
- 同一時間只有一個線程執行字節碼
- CPU密集程序(大量時間花在計算)難以利用多核優勢
- IO期間會釋放GIL,對IO密集程序(大量時間花在網絡、磁盤讀寫)影響不大
如何規避GIL影響
- CPU密集的可以使用多進程+線程池
- IO密集可以使用多線程/協程
- cython拓展
Python什麼操作纔是原子的?一步執行完
- 一個操作如果是一個字節碼指令就可以完成就是原子的
- 原子是可以保證線程安全的
- 使用dis操作來分析字節碼
服務端性能優化
- 數據結構與算法優化
- 數據庫層:索引優化、慢查詢消除、批量操作刪除IO,NoSql
- 網絡IO:批量操作,pipline操作,減少IO
- 緩存:使用內存數據庫 redis/mecached
- 異步:asynio,celery
- 併發:gevent/多線程