計算機發展史 程序

2022-06-08 03:42:08 字數 4712 閱讀 3277

多道技術

1.空間上的復用: 多個程式共用一套計算機硬體

2.時間上的復用: 切換+儲存狀態

1.當乙個程式遇到io操作,作業系統會剝奪該程式的cpu執行許可權(提高了cpu的利用率 並且也不影響程式的執行效率)

2.當乙個程式長時間占用cpu 作業系統也會剝奪該程式的cpu執行許可權(降低了程式的執行效率)

併發:看起來像同時執行的就可以

並行:真正意義上的同時執行

單核的計算機能不能實現並行,但是可以實現併發

同步非同步:表示的是任務的提交方式

同步:任務提交之後 原地等待的任務的執行並拿到返回結果才走 期間不做任何事(程式層面的表現就是卡住了)

非同步:任務提交之後 不再原地等待 而是繼續執行下一行**(結果是要的  但是是用過其他方式獲取)

阻塞非阻塞:表示的程式的執行狀態

阻塞:阻塞態

非阻塞:就緒態 執行態

建立程序的兩種方式

#

建立程序會將**以模組的方式從上往下執行一遍

方式一from multiprocessing import

process

import

time

deftest(name):

print('

%s'%name)

time.sleep(1)

print('hi'

)if__name__ == '

__main__

': #

在建立程序時,在if __name__ == '__main__':內建立

p = process(target=test,args=('

egon

',)) #

建立乙個程序物件,括號內第乙個是函式名,第二個是傳入的引數,且是元組

p.start() #

告訴作業系統,要建立乙個程序

time.sleep(1)

print('

hello')

方式二from multiprocessing import

process

import

time

class

myclass(process):

def__init__

(self,name):

super().

__init__

() self.name =name

defrun(self):

print('

%s'%self.name)

time.sleep(1)

print('hi'

)if__name__ == '

__main__':

p = myclass('

egon')

p.start()

print('

gun')

join方法是先執行完子程式之後. 在執行主程式

from multiprocessing import

process

import

time

deftest(name,i):

time.sleep(i)

print('

hello')

if__name__ == '

__main__':

#p_list =

#for i in range(3):

#p = process(target=test,args=('程序',i))

#p.start()##

for p in p_list:

#p.join()

#print('gun')

p = process(target=test,args=('

egon

',1))

p1 = process(target=test,args=('

jason

',2))

start_time =time.time()

p.start()

p1.start()

p.join()

p1.join()

print('hi'

)

print(time.time()-start_time)

程序物件的其他方法

from multiprocessing import

process,current_process

import

osimport

time

deftest(name):

print('

%s'%name,current_process().pid,'

子程序%s

'%os.getpid(),'

父程序%s

'%os.getppid())

time.sleep(2)

print('

hello')

if__name__ == '

__main__':

p = process(target=test,args=('

egon

',))

p.start()

time.sleep(1)

p.terminate()

#殺死當前程序,本質是讓作業系統幫你去殺死乙個程序

time.sleep(1)

print(p.is_alive()) #

判斷程序是否存活

print('

gun')

殭屍程序與孤兒程序

父程序**子程序資源的兩種方式

1.join方法

2.父程序正常死亡

所有的程序都會步入殭屍程序

孤兒程序

子程序沒死 父程序意外死亡           

針對linux會有兒童福利院(init) 如果父程序意外死亡他所建立的子程序都會被福利院收養

守護程序

from multiprocessing import

process

import

time

deftest(name):

print('

%s'%name)

time.sleep(1)

print('

%s'%name)

if__name__ == '

__main__':

p = process(target=test,args=('

egon

',))

p.daemon = true #

將該程序設定為守護程序

p.start()

time.sleep(1)

print('

bye')

互斥鎖當多個程序操作同乙份資料的時候 會造成資料的錯亂

這個時候必須加鎖處理

將併發變成序列

雖然降低了效率但是提高了資料的安全

注意:1.鎖不要輕易使用 容易造成死鎖現象

2.只在處理資料的部分加鎖 不要在全域性加鎖

鎖必須在主程序中產生 交給子程序去使用

from multiprocessing import

process,lock

import

time

import

json

defsearch(i):

with open(

'data

','r

',encoding='

utf-8

')as f:

data =f.read()

t_d =json.loads(data)

print('

使用者%s查詢餘票%s

'%(i,t_d.get('

ticket

')))

defbuy(i):

with open(

'data

','r

',encoding='

utf-8

')as f:

data =f.read()

t_d =json.loads(data)

time.sleep(1)

if t_d.get('

ticket

') >0:

t_d[

'ticket

'] -= 1with open(

'data

','w

',encoding='

utf-8

')as f:

json.dump(t_d,f)

print('

搶票成功')

else

:

print('

沒票了'

)def

run(i,mutex):

search(i)

mutex.acquire() #搶鎖

buy(i)

mutex.release()

#釋放鎖

if__name__ == '

__main__':

mutex = lock() #

生成一把鎖

for i in range(10):

p = process(target=run,args=(i,mutex))

p.start()

data文字文件

計算機發展史

早期的計算機 人們通過輸入裝置把需要處理的資訊輸入計算機,計算機通過 處理器把資訊加工後,再通過輸出裝置把結果告訴人們。特點 龐大 兩層樓那麼高 通過扣動面板上的無數開關來輸入資訊,通過讀取面板上的訊號燈來獲取結果。具有內部儲存器的計算機 在 處理器旁邊加乙個內部儲存器。特點 相當於一張稿紙。但無法...

計算機發展史

世界上第一台電子數字式計算機 於1946年2月15日 在美國賓夕法尼亞大學 正式投入執行,它的名稱叫 eniac 埃尼阿克 是 電子數值積分計算機 the electronic numberical intergrator and computer 的縮寫。它使用了17468個真空電子管,耗電174...

計算機發展史

計算 計算 儲存 可程式設計化計算 儲存 人工智慧 儲存 簡單的加減乘除算數運算工具,目的是利用工具輔助人工計算 1 純手動工具 結繩記事 算盤 計算尺 2 手動機械工具 帕斯卡的滾輪式加法器 雅卡爾提花織布機 可程式設計化是通用計算機的重要定義,即只要變更指令的儲存序列,通用計算機就能模擬其它形式...