1. 程式人生 > >GIL和copy

GIL和copy

GIL: Global Interpreter Lock  全域性直譯器鎖

    多工執行佔CPU
        多工佔用CPU的資源消耗:程序>執行緒>協程
        在cpython直譯器中只有程序是真的多工,執行緒和協程都是假的多工
        
    什麼是全域性直譯器鎖
        在cpython直譯器中,用多執行緒做多工的事情,在全域性有一個互斥鎖在同一時刻只能允許只有一個執行緒在執行任務,其他執行緒排隊等待獲取鎖,
        
    如何解決GIL在cpython直譯器中帶來的問題
        1.根據程式的型別
            計算密集型:程序,演算法
            IO密集型(input output):執行緒、協程
        
2.換直譯器
      eg:
        jpython
3.換語言
      因為python是一種解釋性的語言,他可以相容好多語言和平臺
      eg:
        c語言,C++,C#,java
深淺拷貝:
    
    深拷貝:拷貝一個內容,會拷貝所有資訊. deepcopy()
    淺拷貝:拷貝一個內容,只拷貝引用(引用地址中的資料). copy()
list: 深拷貝: deepcopy() 拷貝所有資料 淺拷貝: copy() 只拷貝引用地址中的資料 import copy a
= [11, 22] b = [33, 44] c = [a, b] d = copy.copy(c) e = copy.deepcopy(c) print(id(c[0])) print(id(d[0])) print(id(e[0])) tuple: 普通元祖 深拷貝:deepcopy 淺拷貝:copy() deepcopy()和copy()都只拷貝引用地址中的資料 元祖中是可變型別時: 深拷貝: deepcopy() 拷貝所有資料 淺拷貝: copy() 只拷貝引用地址中的資料 tuple() a
= (11, 22) b = (33, 44) c = (a, b) d = copy.copy(c) e = copy.deepcopy(c) print(id(c)) print(id(d)) print(id(e)) +++++++++++ a = [11, 22] b = [33, 44] c = (a, b) d = copy.copy(c) e = copy.deepcopy(c) a.append(55) print(id(c[0])) print(id(d[0])) print(id(e[0])) print(c) print(d) print(e)
  其他資料型別基本都是淺拷貝如: int float str