不同操作系统使用哪些多线程方法以及它们为何重要:
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
这就是我对多线程模型的了解。
为什么它们很重要?
答案 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处理器上并行运行,单线程进程只能在一个处理器上运行,无论存在多少个处理器