一、協程的相關概念
協程(又稱微線程)運行在線程之上,更加輕量級,協程并沒有增加線程總數,只是在線程的基礎上通過分時復用的方式運行多個協程,大大提高工程效率。
協程的特點:
- 輕量級:協程相比于線程來說更輕量級,它們不是由操作系統內核控制,而是完全由程序控制。這意味著創建和管理協程的開銷遠小于線程。
- 非搶占式多任務處理:線程的執行是被操作系統調度的,而協程的切換則是由程序員在代碼中顯示控制的。這樣可以避免許多并發問題,因為協程的切換只會發生在預定的位置。
- 協作式運行:協程之間的運行是協作式的,而不是搶占式的。這意味著一個協程會運行到一定點,然后主動將控制權讓渡給另一個協程,從而實現多個任何的并發執行。
- 協程中不需要多線程的鎖機制,因為只有一個線程,也不存在同時寫變量沖突,在協程中控制共享資源不加鎖,只需要判斷狀態就好了,所以執行效率比線程高很多。
二、Python中的可變對象和不可變對象
- 不可變對象:該對象所指向的內存中的值不能被改變。當改變某個變量時候,由于其指的值不能被改變,相當于把原來的值賦值一份再改變,這會開辟一個新的地址,變量再指向這個新的地址。
- 可變對象:該對象可以在內存地址不變的情況下改變數值。變量(準確的說是引用)改變后,實際上其所指的值直接發生改變,并沒有發生復制行為,也沒有開辟新的地址,通俗點說就是原地改變。換句話說,可以在不創建新的對象的情況下改變對象的值。
三、Python的變量、對象以及引用
- 不可變對象:該對象所指向的內存中的值不能被改變。當改變某個變量時候,由于其指的值不能被改變,相當于把原來的值賦值一份再改變,這會開辟一個新的地址,變量再指向這個新的地址。
- 可變對象:該對象可以在內存地址不變的情況下改變數值。變量(準確的說是引用)改變后,實際上其所指的值直接發生改變,并沒有發生復制行為,也沒有開辟新的地址,通俗點說就是原地改變。換句話說,可以在不創建新的對象的情況下改變對象的值。
Python中,元組(tuple)、字符串str、數組類型(int和float)都是不可變類型。而列表list、字典dict、集合set是可變類型。
四、Python的變量、對象、以及引用
-
變量
- 在python中,變量是對象的引用,這意味著變量實際上只是指向內存中存儲的對象的一個標簽和名稱。
- Python是動態類型語言,這意味著在創建變量時不需要顯式指定變量的數據類型,解析器會根據所保存的對象自動推斷變量的類型。
-
對象
- 對象是一塊內存,表示它們所代表的值。
- 它們可以存儲數據和方法。Python中的所有東西都是對象,即使最簡單的數據類型。
-
引用
- 引用就是自動形成的從變量到對象的指針。引用是一種關系,類似于C語言的指針。
- 當創建一個變量并將對象分配給它時,變量實際上存儲了對象的引用,而不是對象本身。
- 多個變量可以引用同一個對象,這意味著它們都指向相同的內存地址,因此對一個變量的操作可能會影響其他引用同一對象的變量。