# coding:utf-8
'''
進程:重量級進程,就是程序的一次運行。進程擁有獨立的內存空間。
線程:輕量級進程,就是進程分支,同一進程下的線程共享該進程的內存
python虛擬機:python模仿系統運行的一個功能,是單CPU虛擬機,而單CPU無法
實現真正的多線程
單CPU可以同時執行幾件事? 一件事
爲了能同時運行多個程序,則需要異步併發
通常對兩件事 事件A和事件B 執行順序 事件A --->事件B
時間片:將事件A和事件B,進行切分,事件A1、事件A2、事件A3,事件B1、事件B2、事件B3
異步併發:事件A1--->事件B1--->事件A2---->事件B2--->事件A3--->事件B3
1.線程是進程的分支
2.線程之間相互獨立
3.線程擁有指針
4.線程可以被中斷,也可以被搶佔
5.進程結束而線程沒有結束容易導致殭屍進程
6.線程之間由於共享進程的內存所以數據交互要比進程之間方便
全局解釋器鎖(Global Interpreter Lock):爲了保證單CPU情況下,線程在運行的過程當中不被搶佔
GIL : 全局解釋器鎖
GUI :圖形化
例:
VIP電梯
A 9--->1 電梯上鎖
B 7--->1 電梯被上鎖,B不能再搭乘
生成鎖 ——> 分配鎖 ——> 獲取鎖 ——> 加鎖 ——> 釋放鎖
一次性鎖 :一次性的,用完後即消失
重用鎖 :公共鎖,用完後其它線程還可以繼續用
'''
#---------------------------------------------------------------------------
#線程按順序執行
# import time
#
# def loop0():
# print("loop0 start at :",time.ctime())
# time.sleep(3)
# print("loop0 stop at :",time.ctime())
#
# def loop1():
# print("loop1 start at :",time.ctime())
# time.sleep(3)
# print("loop1 stop at :",time.ctime())
#
# def main():
# print ('all start at :',time.ctime())
# loop0()
# loop1()
# print ('all stop at :',time.ctime())
#
# if __name__ =="__main__":
# main()
#----------------------------------------------------------------
#不同的編譯器對線程有影響,以下程序請放在IDLE中執行
import time
import thread
def loop0():
print("loop0 start at :",time.ctime())
time.sleep(3)
print("loop0 stop at :",time.ctime())
def loop1():
print("loop1 start at :",time.ctime())
time.sleep(3)
print("loop1 stop at :",time.ctime())
def main():
print ('all start at :',time.ctime())
thread.start_new_thread(loop0,()) #將loop0放入線程當中並且開始執行,注意代碼裏沒有讓它停止,所以在loop0
#睡眠的時候,後面的代碼也會繼續執行,同理loop1也是,相當於同時進行後面的代碼
thread.start_new_thread(loop1,()) #後面的一個括號是爲了給loop0傳參
#注意,這兩個是不同的線程
print ('all stop at :',time.ctime())
if __name__ =="__main__":
main() #結果是main()函數執行完後,由於兩個線程還沒有結束,還在運行,如果
#將main()當作主函數看待,這相當於進程結束了線程沒有結束,是殭屍進程
#可以在兩個線程後 time.sleep(7) 這4秒內兩個線程已經結束了,主程序也再4S後結束。
線程(一):進程與線程的概念,用基本的thread模塊講解線程含義
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.