2010-02-26 33 views
3

這裏:http://download.oracle.com/docs/html/A95907_01/diff_uni.htm#1077398 我發現在Windows上Oracle是基於線程的,而在Unix上這是基於進程的。爲什麼這樣?Oracle線程和進程

更重要的是,無論系統如何,有很多Oracle進程http://www.adp-gmbh.ch/ora/concepts/processes/index.html

爲什麼日誌編寫器和數據庫寫入器是作爲進程實現的......而查詢執行是使用線程(窗口)或進程(unix)完成的。

回答

3

Oracle利用SGA共享內存區域來存儲所有會話/事務都可訪問的信息(並且必須)。例如,當某行被鎖定時,該鎖在內存中(作爲該行的一個屬性),並且所有其他事務都需要查看它已被鎖定。

在視窗線程不能訪問另一個進程的存儲器

threads cannot存取存儲器 屬於另一過程,其 免受是 由另一個過程中損壞的方法。

因此,在Windows中,Oracle必須是具有多個線程的單個進程。 在OS支持進程之間共享內存的情況下,Oracle作爲多進程體系結構工作並將進程管理留給OS的工作量較小。

Oracle運行大量後臺線程/進程來執行與其他進程異步的(或可能)異步工作。這樣,即使其他進程/線程被阻塞或忙碌時,這些仍然可以繼續。

1

看到此問題我之前在類似的問題上發佈了'What is process and thread?'這個問題。 Windows以這種方式廣泛使用線程。不像基於線程的* nix/Linux系統。並且在這裏也可以看到,這個鏈接是我給出的關於Linux時間線程和進程的直接鏈接(它嵌入到我給出的第一個鏈接中)到explanation

希望這會有所幫助, 最好的問候, 湯姆。

+0

這就是爲什麼Oracle每個實例也有很多進程?我會改變這個問題 – 2010-02-26 18:07:44

+0

是的。在Windows上的Oracle中,* nix(pmon,smon,lgwr,et.al.)上的Oracle中的所有進程都是ORACLE.EXE中的線程。 – 2010-02-26 18:21:01