日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

進程及Python實現

系統 1764 0

進程雜談

          
            #進程就是正在執行的一個過程,是對正在運行程序的一個抽象

#進程由程序、數據集和進程控制塊(最重要的,進程切換  狀態如何保存,恢復和記錄)組成

"""
進程調度:
    1.先來先服務
    2.短作業優先調度
    3.時間片輪轉法
    4.多級反饋隊列

進程遇到IO就會被掛起
"""

'''
將一個單獨的cpu變成多個
虛擬的cpu(多道技術:時間多路復用和空間
多路復用+硬件上支持隔離)
沒有進程的抽象,現代計算機將不復存在
'''

'''
操作系統的作用:
    1.隱藏丑陋復雜的硬件接口,提供良好的抽象接口
    2.管理,調度進程,并且將多個進程對硬件的競爭變得有序
'''

'''
多道技術:
    1.產生背景:針對單核,實現并發
    ps:現在的主機一般是多核,那么每個核都會利用多道技術
    空間復用
    時間復用
'''

'''
同步和異步是通訊方式,阻塞和非阻塞是等待狀態
同步 阻塞:發出消息,不回就傻等。跟女神聊天,站在一旁等,什么都不干
同步 非阻塞:發消息,不回就等,但是干別的事情。跟女神聊天,站在一旁等,一邊吃飯一邊回頭看看手機等消息
異步 非阻塞:發消息,不回消息也不等,就去干別的。跟女神聊天,不回我就去外面打籃球,等聽到電話響了就去聊天
異步 阻塞:發消息,不回也不等,但是也不干別的。跟女神聊天,不回我就在屋里想其他美女,啥也不干。

'''

"""
串行
并發    切換+保存狀態
并行

CPU切換

開啟子進程的原因是為了支持并發

#這是一個函數,也相當于一個作業,
執行時開啟一個子進程,會把父進程整個放到新的名稱空間里面執行
,所以x=1也會放進去



x = 1
def task(): 
    print(x)
    
    
主進程會等子進程全部運行結束才會結束



#僵尸進程:父進程的子進程結束的時候父進程沒有wait()情況下子進程會變成僵尸進程,即子進程先結束,父進程未回收子進程,沒有釋放子進程占用的資源

#孤兒進程:一個父進程退出,它的一個或多個子進程還在運行,那么這些子進程將成為孤兒進程。孤兒進程將會被init進程(進程號為1)所收養,并由init進程對它們完成狀態收集工作(是無害的)

#父進程等著子進程都死,回收僵尸進程,也是無害的

#父進程一直不死,造成了大量僵尸進程,占用了大量的pid號,是有害的,因為pid號是有限的,最簡單的解決辦法就是殺死父進程

          
        

python實現開啟進程

          
            # multiprocess模塊:其實是一個操作管理進程的包,
# 包括創建進程部分,進程同步部分,進程池部分,
# 進程之間的數據共享


#下面的代碼會報錯,因為子進程會把父進程的代碼拷貝運行,再生成子進程在拷貝,,,,類似遞歸

from multiprocessing import Process
import time

def task():
    print('進程 start')
    time.sleep(2)
    print('進程 end')

p = Process(target=task)#實例化出來對象,向操作系統發送開啟子進程的請求,還沒開啟子進程。
p.start()#告訴操作系統我要開啟子進程



#01 開啟子進程的方式一(調用模塊改進執行方法,加__name__ = __main__)


from multiprocessing import Process
import time

def Study(name, age):
    print(f'{name}啟動了子進程1')
    print(f'{name}的年齡是{age}')

def Play(name,age):
    print(f'{name}啟動了子進程2')
    print(f'{name}的年齡是{age}')

if __name__ == '__main__':
    p = Process(target=Study, args=('nick', 18))
    p2 = Process(target=Play, args=('tank', 49))
    p.start() #只是發送請求開啟子進程,
    # time.sleep(2)
    p2.start()#只是發送請求開啟子進程,
    print('執行了父進程') #按順序執行下來,比上面兩個start要先執行

#開啟子進程的方式二(寫一個類繼承Process類)
from multiprocessing import Process

class Study(Process):
    def __init__(self, name):
        super().__init__()  #寫完這個,下面的name又變成了Test-2
        self.name = name
        print(name)
    def run1(self, v):
        self.v = v
        print(f'{self.name}的跑步速度是{v}')

if __name__ == '__main__':
    p = Study('nick')
    p.start()
    p.run1(29)
    
#3 驗證進程的內存空間隔離
from multiprocessing import Process
import time

x = 0
def task():
    global x
    x = 100
    print(f'子進程的x修改為了{x}')
if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    time.sleep(3)
    print(x) #先打印100,再打印0

          
        

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 阜宁县| 荆州市| 吴川市| 潢川县| 行唐县| 连云港市| 通城县| 青阳县| 汨罗市| 福建省| 靖边县| 平原县| 湘西| 沈丘县| 台中市| 汝南县| 新竹县| 清水河县| 弋阳县| 隆子县| 柳江县| 莆田市| 江津市| 山丹县| 葫芦岛市| 武邑县| 阜阳市| 新郑市| 兴文县| 营山县| 岳池县| 金沙县| 资阳市| 奉节县| 临颍县| 延寿县| 安庆市| 土默特右旗| 新野县| 奈曼旗| 江川县|