2010-02-26 36 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