多线程Linux与Windows One-One多对多一对一

时间:2012-10-19 04:17:45

标签: windows linux multithreading ubuntu windows-7

不同操作系统使用哪些多线程方法以及它们为何重要:

Multithreading Models

    Many-to-One - many user threads to one kernel thread
    One-to-One - each user thread is mapped to a kernel thread
    Many-to-Many - Many user threads to smaller or equal # of kernel threads

这就是我对多线程模型的了解。

  • Solaris使用多对一
  • Linux& Windows系列(至少对XP,不确定Win7)使用一对一
  • IRIX,HP-UX和Tru64 UNIX(v9之前的Solaris)使用多对多

为什么它们很重要?

  1. 响应能力 - 在一个线程中浏览网页,加载图片 另一个
  2. 资源共享 - 允许多个活动线程相同 地址空间
  3. 经济 - 记忆&创建流程的资源是 线程共享一个进程的资源(Solaris是30倍) 比线程更慢的创建过程)
  4. 可伸缩性 - 在多处理器中,线程可以在diff处理器上并行运行, 单线程进程只能在一个处理器上运行,无论如何 存在多少处理器

2 个答案:

答案 0 :(得分:1)

问题不在于,什么操作系统使用哪种模型。 如果用户应用程序使用线程(或类似的东西),这些线程可以以不同的方式映射到内核进程。反过来,如果操作系统提供线程(并且最常做的,其中包括您命名的操作系统),那么用户可见的线程可能与内核线程相同。 但是,我总是可以使用库/运行时系统(vm)/编译器来选择不同的映射。

某些情况会出现差异。例如,假设所有用户可见的线程都由作为单个进程/线程运行的运行时系统模拟。在这种情况下,像lock这样的系统调用可能会阻止此内核进程,从而阻止此应用程序的所有用户线程。为了避免这种情况,运行时通常会拦截致电并关心自己。

这是一般情况。详细地说,它可能稍微复杂一些。例如,如果编写使用GUI的WIndows程序,则必须了解编程模型,尤其是与事件循环相关的内容。此外,除了进程和线程之外,Windows还提供作业光纤作为执行单元(或更精确地:考虑用于调度和资源管理的实体)。

答案 1 :(得分:-1)

回答了自己的问题,编辑了原创内容:

这就是我对多线程模型的了解。

Solaris使用多对一 Linux& Windows系列(至少对XP,不确定Win7)使用一对一 IRIX,HP-UX和Tru64 UNIX(v9之前的Solaris)使用多对多 为什么它们很重要?

响应能力 - 在一个线程中进行Web浏览,在另一个线程中加载图像 资源共享 - 在同一地址空间中允许多个活动线程 经济 - 记忆和当线程共享进程的资源时,进程创建的资源成本很高(Solaris的创建过程比线程慢30倍) 可伸缩性 - 在多处理器中,线程可以在diff处理器上并行运行,单线程进程只能在一个处理器上运行,无论存在多少个处理器