【问题标题】:Oracle Threads and ProcessesOracle 线程和进程
【发布时间】:2011-01-21 13:12:03
【问题描述】:

这里:http://download.oracle.com/docs/html/A95907_01/diff_uni.htm#1077398 我发现在 Windows 上 Oracle 是基于线程的,而在 Unix 上这是基于进程的。为什么会这样?

更重要的是,无论系统如何,都有很多Oracle进程http://www.adp-gmbh.ch/ora/concepts/processes/index.html

为什么日志写入器和数据库写入器被实现为进程......并且查询执行是使用线程(windows)或进程(unix)完成的。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    Oracle 使用 SGA 共享内存区域来存储所有会话/事务都可以(并且必须)访问的信息。例如,当一行被锁定时,该锁在内存中(作为该行的一个属性),所有其他事务都需要看到它被锁定。

    在windows中一个线程不能访问另一个进程的内存

    threads cannot 访问内存 属于另一个进程,它 保护一个进程不被 被另一个进程损坏了。

    因此,在 Windows 中,Oracle 必须是具有多个线程的单个进程。 在操作系统支持进程之间共享内存的情况下,Oracle 作为多进程架构工作并将进程管理留给操作系统的工作就更少了。

    Oracle 运行许多后台线程/进程来完成与其他进程异步(或可以)异步的工作。这样,即使其他进程/线程被阻塞或忙碌,它们也可以继续。

    【讨论】:

      【解决方案2】:

      请参阅我之前发布的与此问题“What is process and thread?”类似的答案。 Windows 以这种方式广泛使用线程。与基于线程的基于 *nix/Linux 的系统不同。另请参阅此处,此链接是我给出的关于 Linux 时间划分线程和进程的explanation 的直接链接(嵌入在我给出的第一个链接中)。

      希望这会有所帮助, 最好的祝福, 汤姆。

      【讨论】:

      • 这就是为什么Oracle每个实例也有很多进程的原因?我会改变这个问题
      • 是的。在 Windows 上的 Oracle 中,*nix(pmon, smon, lgwr, et.al.) 上的 Oracle 中的所有进程都是 ORACLE.EXE 中的线程。
      猜你喜欢
      • 2010-09-15
      • 2010-09-25
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      相关资源
      最近更新 更多