多執行緒,多程序使用過程中的問題和解決方案

2022-08-18 21:42:12 字數 1917 閱讀 8972

次作,只是摘錄,組合而成,只能參考

多執行緒:

乙個程序中可以有多條執行路徑同時執行,乙個執行緒就是程序中的一條執行路徑。

在早期的作業系統中並沒有執行緒的概念,程序是能擁有資源和獨立執行的最小單位,也是程式執行的最小單位。它相當於乙個程序裡只有乙個執行緒,程序本身就是執行緒。所以執行緒有時被稱為輕量級程序(lightweight process,lwp)。後來,隨著計算機的發展,對多個任務之間上下文切換的效率要求越來越高,就抽象出乙個更小的概念——執行緒,一般乙個程序會有多個執行緒。

多執行緒原理:執行緒是分配cpu資源的最小單位,單cpu多執行緒是時間輪片的切換,多cpu可以真正的做到多cpu同時工作。

多執行緒程式設計為程式開發帶來了很多的方便,但是也帶來了一些問題,這些問題是在程式開發過程中必須進行處理的問題。

這些問題的核心是,如果多個執行緒同時訪問乙個資源,例如變數、檔案等,時如何保證訪問安全的問題。在多執行緒程式設計中,這種會被多個執行緒同時訪問的資源叫做臨界資源。

使用互斥解決多執行緒問題是一種簡單有效的解決辦法,但是由於該方法比較簡單,所以只能解決一些基本的問題,對於複雜的問題就無法解決了。

解 決多執行緒問題的另外一種思路是同步。同步是另外一種解決問題的思路,結合前面衛生間的示例,互斥方式解決多執行緒的原理是,當乙個人進入到衛生間內部時,別 的人只

能在外部時刻等待,這樣就相當於別的人雖然沒有事情做,但是還是要占用別的人的時間,浪費系統的執行資源。而同步解決問題的原理是,如果乙個人進入 到衛生間內部時,則別的人可以去睡覺,不占用系統資源,而當這個人從衛生間出來以後,把這個睡覺的人叫醒,則它就可以使用臨界資源了。所以使用同步的思路 解決多執行緒問題更加有效,更加節約系統的資源。

多程序:

1、因為幹活時的需求要多個程序同時訪問某個檔案並進行讀寫操作的需求因為檔案並不是被同乙個程序訪問,而且極大可能會發生多程序爭搶檔案的情況,如果在同乙個程序裡不同的執行緒訪問,或許還能使用執行緒鎖的方法控制,但是跨程序時就無法解決。網上解決方法基本上都像linux裡日誌檔案服務一樣,建立乙個獨立的檔案操作服務,由檔案操作服務來控制不同程序對同乙個檔案的訪問。但是這樣改動量就比較大,不同的程式可能用的編寫的語言不同。

為了解決不同開發工具開發和效率帶來的問題。

每次讀寫檔案前先改檔案的副檔名,在程式訪問檔案前,都必須用原檔名改名為包含簽出副檔名的新檔名(現實中會將副檔名改為.ck),其他程序只會訪問那些不是.ck為副檔名的檔案。

方法:第

一、程式首先得到需要訪問的原檔名(比如test.xml)

第二、使用原檔名作為基礎,改名為簽出檔名(比如test.ck)

第三、因為同一時間只可能有乙個程序能夠修改檔名,所以當乙個程序搶先與另乙個程序修改了檔案,那另乙個程序再次使用原檔名(test.xml)將無法訪問到這個檔案(因為檔名已經被修改為test.ck)而報錯(可以遮蔽這個錯誤),如果修改成功則表示檔案已經被你簽出。你可以繼續使用新的檔名對檔案進行修改。其他程序如果使用原檔名將無法訪問這個檔案。

第四、處理完資料後將副檔名改回原檔名(test.xml)原理和寫資料庫時搶鎖類似,每次訪問檔案前都必須首先改名(搶鎖),只有搶到鎖的程序才能進行後續操作。否則則等待其他程序釋放鎖。

2、作業系統中多程序並行時的死鎖問題,死鎖是多個程序迴圈等待它占有的資源而無限期的僵持下去的局面。計算機產死鎖的根本原因是資源有限切操作不當。作業系統程序產生的死鎖的原因為兩點:

1、競爭資源。當系統中提供多個程序共享的資源,不足以滿足他們的需求時,引起它們的競爭而產生死鎖。

2、程序推進順序非法。程序在執行的過程中,請求和釋放資源順序不當,導致了程序死鎖。

處理方法:

1、方法一

2、方法二

python使用過程中問題

1.檢視python支援的 whl格式 在cmd輸入python 或者 python3.6 import pip print pip.pep425tags.get supported 2.在修改python.exe為python36.exe 任何重新命名 後,pip會報錯 fatal error i...

ubuntu使用過程中的問題

1 一般來說可執行檔案在 usr bin或者 usr share bin 或者 usr local bin 2 關於ubuntu不能用無線上網 sudo vim etc network inte ces 新增 auto lo iface lo inet loopback auto ens33 ifa...

element ui dialog使用過程中的坑

場景一 我們將dialog寫成乙個可復用的公共元件用於顯示不同內容 如 操作中的修改或新增的彈窗 之後發現dialog的遮罩將彈出層 點選修改或新增後理應由乙個彈窗顯示出來 都蓋住了,而我想要的效果是遮罩只遮住舊的視窗,而當前視窗應該完全顯示 注 是使用easyui的panel和window來包裹的...