日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习笔记(二十二)—— 了解进程和线程

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记(二十二)—— 了解进程和线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、進程
    • 1.1、什么是程序
    • 1.2、了解進程
    • 1.3、進程的三種狀態
    • 1.4、多進程
  • 二、線程
    • 2.1、了解線程
    • 2.2、了解多線程
    • 2.3、進程與線程的區別
    • 2.4、多線程實現
    • 2.5、線程鎖
    • 2.6、全局解釋鎖(GIL)

一、進程

1.1、什么是程序

程序是指令和數據的有序集合,其本身沒有任何運行的含義,是一個靜態的概念。而進程則是在處理機上的一次執行過程,它是一個動態的概念。這個不難理解,其實進程是包含程序的,進程的執行離不開程序,進程中的文本區域就是代碼區,也就是程序。


1.2、了解進程

進程就是一段程序的執行過程。它是一個具有一定獨立功能的程序關于某個數據集合的一次運行活動。它是操作系統動態執行的基本單元,在傳統的操作系統中,進程既是基本的分配單元,也是基本的執行單元。

簡單的來講進程的概念主要有兩點:
進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括文本區域(textregion)、數據區域(dataregion)和堆棧(stackregion)。文本區域存儲處理器執行的代碼;數據區域存儲變量和進程執行期間使用的動態分配的內存;堆棧區域存儲著活動過程調用的指令和本地變量。
進程是一個“執行中的程序”。程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成為一個活動的實體,我們稱其為進程。


1.3、進程的三種狀態

進程有三個狀態,就緒、運行和阻塞。

  • 就緒態:其實就是獲取了除cpu外的所有資源,只要處理器分配資源就可以馬上執行。
  • 運行態:獲得了處理器分配的資源,程序開始執行。
  • 阻塞態:當程序條件不夠時候,需要等待條件滿足時候才能執行,如等待i/o操作時候,此刻的狀態就叫阻塞態。

1.4、多進程

Python中的多進程是通過multiprocessing包來實現的,和多線程的threading.Thread差不多,它可以利用multiprocessing.Process對象來創建一個進程對象。這個進程對象的方法和線程對象的方法差不多也有start(),run(), join()等方法,其中有一個方法不同Thread線程對象中的守護線程方法是setDeamon,而Process進程對象的守護進程是通過設置daemon屬性來完成的。

Python多進程的實現方法,和多線程類似
實現示例:

from multiprocessing import Process def fun1(name):print('%s進程開啟了' %name)if __name__ == '__main__':for i in range(5): #開啟5個子進程執行fun1函數p = Process(target=fun1,args=(i,)) #實例化進程對象p.start()p.join() #主進程阻塞

結果:

0進程開啟了 1進程開啟了 2進程開啟了 3進程開啟了 4進程開啟了

join方法:是讓主進程等待子進程運行完畢后再執行主進程的。(即主進程阻塞)
類的方式創建線程

from multiprocessing import Process class MyProcess(Process): #繼承Process類def __init__(self,name):super(MyProcess,self).__init__()self.name = namedef run(self):print(f'{self.name}進程開啟了')if __name__ == '__main__':for i in range(5): #開啟5個子進程執行fun1函數p = MyProcess(str(i)) #實例化進程對象p.start()p.join()

Process類的其他方法

構造方法: Process([group [, target [, name [, args [, kwargs]]]]])group: 線程組 target: 要執行的方法name: 進程名args/kwargs: 要傳入方法的參數實例方法:is_alive():返回進程是否在運行,bool類型。join([timeout]):阻塞當前上下文環境的進程程,直到調用此方法的進程終止或到達指定的timeout(可選參數)。start():進程準備就緒,等待CPU調度run():strat()調用run方法,如果實例進程時未制定傳入target,這star執行t默認run()方法。terminate():不管任務是否完成,立即停止工作進程屬性:daemon:和線程的setDeamon功能一樣name:進程名字pid:進程號

二、線程

2.1、了解線程

通常在一個進程中可以包含若干個線程,當然一個進程中至少有一個線程,不然沒有存在的意義。線程可以利用進程所擁有的資源,我們把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。


2.2、了解多線程

多線程是為了同步完成多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率。線程是在同一時間需要完成多項任務的時候實現的。

多線程就像火車的每一節車廂,而進程則是火車。車廂離開火車是無法跑動的,同理火車也不可能只有一節車廂。多線程的出現就是為了提高效率。


2.3、進程與線程的區別

進程和線程的主要差別在于它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發操作,只能用線程,不能用進程。

  • 簡而言之,一個程序至少有一個進程,一個進程至少有一個線程。
  • 線程的劃分尺度小于進程,使得多線程程序的并發性高。
  • 另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
  • 線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
  • 從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區。

  • 2.4、多線程實現

    Python的標準庫提供了兩個模塊:_thread和threading,_thread是低級模塊,threading是高級模塊,對_thread進行了封裝。絕大多數情況下,我們只需要使用threading這個高級模塊。啟動一個線程就是把一個函數傳入并創建Thread實例,然后調用start()開始執行。

    補充知識點:主線程和子線程
    程序執行時,程序本身就是一個線程,叫主線程。
    手動創建的線程,叫子線程。
    主線程的執行中不會等待子線程執行完畢,就會直接執行后面的代碼創建線程。

    實現示例

    from threading import Thread import timedef run(name):print(name,'線程執行了!')time.sleep(4) #創建線程 t1 = Thread(target=run,args=('t1',)) t2 = Thread(target=run,args=('t2',)) #啟動線程 t1.start() t2.start()----結果: t1 線程執行了! t2 線程執行了!

    類的方式創建線程

    from threading import Thread import timeclass MyThread(Thread):def __init__(self,name):super(MyThread,self).__init__()self.name = namedef run(self):print(self.name, '線程執行了!')time.sleep(4)t1 = MyThread('t1') t2 = MyThread('t2') t1.start() t2.start()

    其他方法:

    isAlive(): 返回線程是否活動的。 getName(): 返回線程名。 setName(): 設置線程名。 threading模塊提供的一些方法: threading.currentThread(): 返回當前的線程變量。 threading.enumerate(): 返回一個包含正在運行的線程的list。正在運行指線程啟動后、結束前,不包括啟動前和終止后的線程。 threading.activeCount():返回正在運行的線程數量,與len(threading.enumerate())有相同的結果。

    2.5、線程鎖

    多線程可以同時運行多個任務但是當多個線程同時訪問共享數據時,可能導致數據不同步,甚至錯誤!因此,就要使用線程鎖。

    線程鎖:當有多個線程訪問同一對象的加鎖方法/代碼塊時,同一時間只有一個線程在執行,其余線程必須要等待當前線程執行完之后才能執行該代碼段。但是,其余線程是可以訪問該對象中的非加鎖代碼塊的。

    用法

    #創建鎖 lock = threading.Lock() #鎖定 lock.acquire([timeout]) #釋放 lock.release()

    優缺點

    優點:保證資源同步
    缺點:
    等待肯定會慢

    示例

    import time import threadinglock = threading.Lock() num = 100 #出售 def sail(name):lock.acquire() #上鎖global numif num>0:num-=1print(name,'出售了一張電影票,還剩:',num,'張')lock.release() #釋放鎖#售票 while True:if num>0:A = threading.Thread(target=sail, args=('A售票員',))B = threading.Thread(target=sail, args=('B售票員',))A.start()B.start()else:break

    2.6、全局解釋鎖(GIL)

    不管系統CPU核心是多少,都保證python程序中同一時間點只能執行一個線程。它本本意上是為了實現數據安全問題,但從結果上卻造成了cpu資源上的浪費,影響了程序執行的效率,因此弊大于利。(重點記)

    我們可以通過使用多進程來解決GIL所造成的問題

    總結

    以上是生活随笔為你收集整理的学习笔记(二十二)—— 了解进程和线程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美人体视频 | 亚洲男人在线天堂 | 午夜成年视频 | 日韩在线一卡 | 国产精品二区在线 | 91精品国产99久久久久久红楼 | 92久久精品一区二区 | 中出在线播放 | 国产欧美在线播放 | 免费三级在线 | 一级黄毛片 | 日本不卡一区在线 | 国产福利91精品一区二区三区 | 国产一线在线观看 | 日本人视频69式jzzij | 日本xxxxxwwwww | 视频在线观看一区二区三区 | 精品少妇人妻av免费久久洗澡 | 久久精品综合 | 香蕉久久网站 | 男女污视频 | 男欢女爱久石 | 亚洲黄色短视频 | 日本午夜激情视频 | 可以直接观看的av | 婷婷久久丁香 | 日本变态折磨凌虐bdsm在线 | 国产成人激情视频 | 成人28深夜影院 | 天堂亚洲 | 青青视频免费观看 | 网址在线观看你懂的 | 久久久在线 | 女人脱下裤子让男人捅 | 欧美一区二区三区在线看 | 四虎影视av| 就爱操av | 国内黄色一级片 | 亚洲自拍av在线 | 国产精品亚洲一区二区三区 | 欧美激情免费在线 | 日本精品一区二区三区在线观看 | 亚洲国产综合久久 | 国产香蕉视频在线观看 | 欧美7777| 日韩欧美视频在线 | 欧美日韩亚洲精品内裤 | 四虎成人av | 牛牛电影国产一区二区 | 亚洲精品理论片 | 综合网五月天 | 夏目彩春娇喘呻吟高潮迭起 | 黄色一级录像片 | 日本久草视频 | 熟女毛片 | 人妻无码久久精品人妻 | 黄色a级片视频 | 欧美午夜精品久久久久久孕妇 | 久久久高潮 | 婷婷五月综合缴情在线视频 | 调教一区 | 亚洲色图图 | 亚洲91视频 | 亚欧色视频 | 综合网婷婷 | 狠狠躁夜夜躁人人爽天天高潮 | 91精品久久久久久久99蜜桃 | www亚洲一区 | 精品久久人人 | 精品国产一区在线观看 | 蜜桃av免费在线观看 | 青草视频网 | 免费看aaaaa级少淫片 | a视频网站 | 潘金莲一级淫片免费放动漫 | 国产精品久久久一区二区 | 日韩在线一区二区三区四区 | 91久久久久久久 | 黄色小视频在线观看免费 | av高清在线| wwww日本60| 婷婷五月小说 | 97成人精品 | 亚洲欧美中文日韩在线 | 什么网站可以看毛片 | 欧美一区二区久久久 | 国产最新毛片 | 欧美精品在线视频观看 | 在线播放视频高清在线观看 | 日韩精品v | 亚洲成人动漫在线观看 | 欧美成在线视频 | 中国大陆一级片 | 热99这里只有精品 | 国产精品变态另类虐交 | av三级网站 | 日韩综合网| 综合网av| 嫩草视频在线观看 |