openGauss數據庫是一個單進程多線程的數據庫。
客戶端可以使用JDBC/ODBC/Libpq/Psycopg等驅動程序,向openGauss的主線程(Postmaster)發起連接請求。
openGauss為什么要使用多線程架構
隨著計算機領域多核技術的發展,如何充分有效的利用多核的并行處理能力,是每個服務器端應用程序都必須考慮的問題。由于數據庫服務器的服務進程或線程間存在著大量數據共享和同步,而多線程可以充分利用多CPU來并行執行多個強相關任務,例如執行引擎可以充分的利用線程的并發執行以提供性能。在多線程的架構下,數據共享的效率更高,能提高服務器訪問的效率和性能,同時維護開銷和復雜度更低,這對于提高數據庫系統的并行處理能力非常重要。
多線程的三大主要優勢:
優勢一:線程啟動開銷遠小于進程啟動開銷。與進程相比,它是一種非常“節儉”的多任務操作方式。在linux系統下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這是一種“昂貴”的多任務工作方式。而運行于一個進程中的多個線程,它們彼此之間使用相同的地址空間,共享大部分數據,啟動一個線程所花費的空間遠遠小于啟動一個進程所花費的空間。
優勢二:線程間方便的通信機制:對不同進程來說,它們具有獨立的數據空間,要進行數據的傳遞只能通過通信的方式進行,這種方式不僅費時,而且很不方便。線程則不然,由于同一進程下的線程之間共享數據空間,所以一個線程的數據可以直接為其他線程所用,這不僅快捷,而且方便。
優勢三:線程切換開銷小于進程切換開銷,對于Linux系統來講,進程切換分兩步:1.切換頁目錄以使用新的地址空間;2.切換內核棧和硬件上下文。對線程切換,第1步是不需要做的,第2步是進程和線程都要做的,所以明顯線程切換開銷小。