-1

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

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(Solaris v9 之前)使用多对多

为什么它们很重要?

  1. 响应性 - 在一个线程中浏览网页,在另一个线程中加载图像
  2. 资源共享 - 允许同一地址空间中的多个活动线程
  3. 经济 - 创建进程的内存和资源成本很高,而线程共享进程的资源(Solaris 创建进程比线程慢 30 倍)
  4. 可扩展性 - 在多处理器中,线程可以在不同的处理器上并行运行,单线程进程只能在一个处理器上运行,而不管有多少处理器存在
4

2 回答 2

1

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

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

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

于 2012-10-19T06:02:48.650 回答
-1

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

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

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

响应性 - 在一个线程中浏览网页,在另一个线程中加载图像资源共享 - 允许在同一地址空间中进行多个活动线程经济 - 用于创建进程的内存和资源是昂贵的,而线程共享一个进程的资源(Solaris 创建进程比创建进程慢 30 倍)线程)可扩展性 - 在多处理器中,线程可以在不同的处理器上并行运行,单线程进程只能在一个处理器上运行,而不管有多少处理器存在

于 2012-10-19T12:52:26.253 回答