(請注意,這整個問題,雖然解決parrallel編程,主要是語境下成幀/蟒蛇3.X的應用程序)澄清的並行線程之間的差異/處理
此刻,我收集從閱讀中得知:
a 進程,是一組指令,以及它在運行時伴隨的所有資源。它將包括以下代碼,以及輸入/輸出/資源/內存/文件句柄/等。換句話說,它的整個廚房水槽。
# this script, while running as a whole, is considered a process
print('hello world')
with open('something.txt', 'a') as file_handle:
for i in range(500):
file_handle.write('blablabla')
print('job done!')
但是,如果我想要做更多的時間是相同的 - 爲了最大限度地提高我的電腦處理能力 - 我不得不產生更多 進程或線程的選項。與上面簡單的python腳本過程類比相比,我選擇哪一個,它們會是什麼?是否正在產生另一個過程,等同於在更改文件名時再次回顧整個過程?
# changed filename (is this "another process?")
print('hello world')
with open('something_else.txt', 'a') as file_handle:
for i in range(500):
file_handle.write('blablabla')
print('job done!')
我也得到了模糊的概念,一個單一的進程可以包含多個線程,將它只是加載大量的更多的「概念性」的循環則相當於?
# like would this be a "thread" a barebones "subset" of an entire program?
with open('something.txt', 'a') as file_handle:
for i in range(500):
file_handle.write('blablabla')
不管怎樣,兩者真的不同嗎?在網上搜索時,我發現流程更獨立和重量級,而線程更輕量化,「更容易與對方共享內存」。但這到底意味着什麼?爲什麼不能進程共享內存?如果線程可以「共享內存」,我怎麼不能訪問來自同一腳本的不同線程的不同變量(例如from thread_a import var_data
)
最後,究竟計算什麼? CPU是否計算線程或進程?或者它是一個包含多個內核/等的總稱。內核是否計算進程或線程?
摘要:
1)用簡單的Python腳本作爲進程的例子,你會產卵另一個進程/線程相當於是什麼? (例如,重複的腳本/腳本的子集/只有一段代碼)
2)進程與線程有什麼根本的區別,進程是否能夠做一些線程無法做的事情的例子?
3)爲什麼內存/數據通常被描述爲「難以共享」進程比線程?以及線程如何共享數據呢?
4)CPU是否計算線程或進程。做內核計算線程或進程
5)什麼是何時使用什麼
我想了解更多關於線程/進程的微妙細微差別以及他們如何共享資源的更詳細的機制。我可以去哪裏學習?這是否屬於OS課程或並行編程的入門領域?任何推薦的材料? (當然重點放在python上) 另外,如果我有2個內核,不會有2個線程實際並行嗎? – AlanSTACK
Python中的線程實際上並不平行,即使你有多個核心。我認爲你應該參加並行編程課程而不是OS課程。線程和進程都不是很難開始,然後它都依賴於你的應用程序。你可以在這裏找到很多文檔(http://sebastianraschka.com/Articles/2014_multiprocessing_intro.html),[這裏](https://pymotw.com/2/multiprocessing/communication.html),[這裏]( http://eli.thegreenplace.net/2012/01/04/shared-counter-with-pythons-multiprocessing)。 – CoMartel
您應該真正定義一個簡單的應用程序並使用線程和進程對其進行測試。如果您對特定應用程序有疑問並且哪種方法最適合,請詢問關於此特定情況的另一個問題。 – CoMartel