為什麼 MySQL 使用多執行緒,而 Oracle 和 PostgreSQL 使用多程序?

時間 2021-05-10 15:35:01

1樓:白鯨魚

程序: 作業系統中分配資源的基本單位

執行緒: 作業系統中排程資源的基本單位

協程: 比執行緒更小的執行單元,自帶cpu上下文,乙個協程乙個棧就像方圓 和 哼哈二匠 所說早期unix沒有提供多執行緒,只有多程序。

另外不同執行緒模型優劣:

2樓:

這裡不從歷史原因說僅僅從技術上講多執行緒與多程序有什麼什麼好處,因為自己曾經把postgres從多程序改為多執行緒,中間歷盡苦難。

多執行緒多程序在linux的差別並不是很大,但是在Windows的效能差別就比較大,實際上oralce在Windows的版本也是多執行緒的。

多程序好處就是相對來講穩定性較好,乙個程序掛掉,重新拉起來就好,但是乙個執行緒crash會導致整個程序都crash的.

3樓:

一般作業系統教科書裡的執行緒和程序的概念只是抽象理論上的,在不同OS裡的實現顯然有很大區別。

Windows上線程庫很方便很高效,強於posix thread,而process的建立代價就很昂貴;而且這是由MS自己設計實現的,直接以系統API方式提供。

Unix上process model更簡單,而multithreading基本就是乙個雷區,Unix上幾十年來的主流開發語言C/C++根本就不支援thread(直到C++11),即使後來有了posix thread,在移植性上也是開發人員的噩夢。

所以,拋開具體的DB產品不說,multitasking在Windows上一般首選thread,而Unix上肯定是用fork了。這也是為什麼mysql基於solaris卻採用thread會被認為是挑戰。

4樓:方圓

ORACLE在windows上也是多執行緒。

傳統的unix系統,早期沒有提供多執行緒,只有多程序。linux是最近的版本才加入多執行緒支援,以前一直都是多程序。windows很早就支援多執行緒,本地應用大部分也是多執行緒。

因此oracle在windows上一直都是多執行緒,在unix上才是多程序。多程序的好處是,乙個程序崩潰不會影響其他程序,多執行緒的好處是不需要共享記憶體這樣的手段來訪問資料庫緩衝區。mysql很可能是從windows發站起來的,pg和oracle都是最早從unix發站起來的,因此前者是多執行緒,後兩者是多程序。

為什麼php多執行緒沒人用

ZealReal 程序資源很昂貴,所以不會輕易使用多程序。至於執行緒,php支援的不好,php5後有個協程,php開發人員基本不會去使用,協程相當於使用使用者空間的執行緒 一般執行緒是系統空間 Swoole在非同步及協程方面做的不錯,開始會越來越多人使用,大大提高php的併發能力。 import 潘...

為什麼電腦都64核128執行緒了,多執行緒軟體還這麼難寫?

Mimosa 當今世界,軟體技術的發展嚴重落後硬體的發展。在多執行緒程式設計方面一直沒有多大進展,指令碼程式語言基本上不能簡單實現真正意義的多執行緒執行。GIL永遠是Python的乙個痛點。曾經有人試圖實現乙個無GIL的Python,結果執行效率更差。長期以來,我們一直致力於這方面的工作,並且取得突...

為什麼 Java 堅持多執行緒不選擇協程?

Xpecya 最直接的原因我認為是jdbc 協程你想跑滿單核心首先你得非阻塞。但是對於實際專案而言,只要你需要從資料庫獲取資料,就必須用乙個把單執行緒徹底堵死的jdbc api 所以如果現在jdk推出協程,你也只能在不需要jdbc呼叫的場合才能玩玩。而這 真的沒什麼意思。如果真的要搞協程,首先請推出...