PostgreSQL 開發者社群再度討論是否要將現有的 Processes 架構改為 Threads 架構。

他指出改為 Threads 架構可能有以下好處:

  1. 不再需要使用共享記憶體,沒有靜態記憶體上限的設制。
  2. Threads 非常容易實現並行演算法,Threads 之間的資料交換更有效率。
  3. Threads 處理同步更輕量。Firebase 社群的同事指出,僅將其中 sync 的要理用 Threads 實現後,效能就獲得 20% 的提升。估計取代更多原先 Processes 設計會更顯著。
  4. Threads 本身更輕量。彼此間的 Context switch (上下文切換) 耗更少時間,也更省記憶體。
  5. Threads 存取虛擬記憶體更有效率。因為所有 Threads 共同相同的記憶體空間。
  6. Threads 帶來更快的程序啟動。在任何時候,PostgreSQL 要為每個用戶的請求都新啟一個新程序啟動是一件不好的事。所以我們才需要在 PostgreSQL 中使用 Connection Pool 來保證可接受的效能。另外,每個請求都新啟一個新程序會造成很多 Page faults,進而嚴重影響效能。

當然,他也指出目前 Processes 架構的好處:

  1. 更好的隔離性及錯誤保護。
  2. 更簡單的錯誤處理。
  3. 掌控使用的資源更容易。

最後需要補充的是,MySQL 一開始就是個善用 Threads 的資料庫系統,與 Processes 為主的 PostgreSQL 在這點上有很大的不同。這些爭論過去我的簡報也有點評。

資料來源

Postgres with pthread