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

進(jìn)程及Python實(shí)現(xiàn)

系統(tǒng) 1677 0

進(jìn)程雜談

          
            #進(jìn)程就是正在執(zhí)行的一個過程,是對正在運(yùn)行程序的一個抽象

#進(jìn)程由程序、數(shù)據(jù)集和進(jìn)程控制塊(最重要的,進(jìn)程切換  狀態(tài)如何保存,恢復(fù)和記錄)組成

"""
進(jìn)程調(diào)度:
    1.先來先服務(wù)
    2.短作業(yè)優(yōu)先調(diào)度
    3.時間片輪轉(zhuǎn)法
    4.多級反饋隊列

進(jìn)程遇到IO就會被掛起
"""

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

'''
操作系統(tǒng)的作用:
    1.隱藏丑陋復(fù)雜的硬件接口,提供良好的抽象接口
    2.管理,調(diào)度進(jìn)程,并且將多個進(jìn)程對硬件的競爭變得有序
'''

'''
多道技術(shù):
    1.產(chǎn)生背景:針對單核,實(shí)現(xiàn)并發(fā)
    ps:現(xiàn)在的主機(jī)一般是多核,那么每個核都會利用多道技術(shù)
    空間復(fù)用
    時間復(fù)用
'''

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

'''

"""
串行
并發(fā)    切換+保存狀態(tài)
并行

CPU切換

開啟子進(jìn)程的原因是為了支持并發(fā)

#這是一個函數(shù),也相當(dāng)于一個作業(yè),
執(zhí)行時開啟一個子進(jìn)程,會把父進(jìn)程整個放到新的名稱空間里面執(zhí)行
,所以x=1也會放進(jìn)去



x = 1
def task(): 
    print(x)
    
    
主進(jìn)程會等子進(jìn)程全部運(yùn)行結(jié)束才會結(jié)束



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

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

#父進(jìn)程等著子進(jìn)程都死,回收僵尸進(jìn)程,也是無害的

#父進(jìn)程一直不死,造成了大量僵尸進(jìn)程,占用了大量的pid號,是有害的,因?yàn)閜id號是有限的,最簡單的解決辦法就是殺死父進(jìn)程

          
        

python實(shí)現(xiàn)開啟進(jìn)程

          
            # multiprocess模塊:其實(shí)是一個操作管理進(jìn)程的包,
# 包括創(chuàng)建進(jìn)程部分,進(jìn)程同步部分,進(jìn)程池部分,
# 進(jìn)程之間的數(shù)據(jù)共享


#下面的代碼會報錯,因?yàn)樽舆M(jìn)程會把父進(jìn)程的代碼拷貝運(yùn)行,再生成子進(jìn)程在拷貝,,,,類似遞歸

from multiprocessing import Process
import time

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

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



#01 開啟子進(jìn)程的方式一(調(diào)用模塊改進(jìn)執(zhí)行方法,加__name__ = __main__)


from multiprocessing import Process
import time

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

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

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

#開啟子進(jìn)程的方式二(寫一個類繼承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 驗(yàn)證進(jìn)程的內(nèi)存空間隔離
from multiprocessing import Process
import time

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

          
        

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四子王旗| 庆元县| 南康市| 惠安县| 玛沁县| 门源| 隆昌县| 永川市| 九龙县| 临沂市| 宁安市| 杭锦后旗| 黑龙江省| 凉山| 红安县| 禄丰县| 鸡泽县| 甘南县| 思南县| 汶川县| 大安市| 商城县| 荣昌县| 开江县| 泌阳县| 吉水县| 青神县| 九龙坡区| 宜州市| 涟源市| 革吉县| 辰溪县| 乐平市| 扶余县| 临城县| 昂仁县| 株洲县| 安达市| 德江县| 克东县| 吴川市|