美文网首页
OS Thread Model

OS Thread Model

作者: onedoc | 来源:发表于2019-10-11 01:23 被阅读0次

概念

线程: 程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,线程由CPU独立调度,在多CPU下可以多线程同时运行。
进程: 进程是资源(CPU、内存等)分配的基本单位,拥有独立的地址空间,它是程序执行时的一个实例,一个进程可有多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。

操作系统线程模型

1:1核心线程模型 pthread线程库--NPTL

image.png

内核线程(KLT)由操作系统内核直接支持的线程,内核通过操纵调度器对线程进行调用,程序不直接与内核线程接触而是通过轻量级进程(LWP),LWP内核线程一一对应,程序和内核线程通过轻量级进程联系起,这样的局限性就是每次线程操作都需要从用户态到内核态的转化,代价高,而且由于一一对应的关系,轻量级线程数量肯定有限的,受限于内核线程的数量

N:1用户线程

image.png

过去的操作系统大部分是这种实现方式,这种方式的好处之一就是即使操作系统不支持线程,也可以通过库函数来支持线程,但是需要程序员自己实现线程的数据结构、创建销毁和调度维护。也就相当于需要实现一个自己的线程调度内核,在操作系统中实现了真实的多线程,减少了操作系统从内核态到用户态的切换开销

N:M混合线程模型NGPT

image.png

N:M混合线程模型提供了两级控制,将用户线程映射为系统的可调度体以实现并行,这个可调度体称为轻量级进程(LWP:light weight process),LWP
再一一映射到核心线程。如下图所示。OS内核将每一个核心线程都调到系统CPU上,因此,所有线程都工作在“系统竞争范围.

语言小结

Golang的协程就是使用了这种模型,在用户态,协程能快速的切换,避免了线程调度的CPU开销问题
Java线程实现基于操作系统原生线程模式来实现,对于SUN JDK windows版本和linux版本都是使用一对一的线程模型来实现,就是一条java线程就映射到一条轻量级进程一种,也就是说现在的Java中线程的本质,其实就是操作系统中的线程

参考链接:
[https://www.cnblogs.com/jingzhishen/p/4433023.html]
[https://blog.csdn.net/CringKong/article/details/79994511#1_1]

相关文章

  • OS Thread Model

    概念 线程: 程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,线程由CPU独立调度,在多...

  • Mysql thread 与 OS thread

    欢迎阅读 陈同学博客原文 参考资料MySQL ThreadsThe threads TableHow MySQL ...

  • Happens-before规则

    <> de...

  • pytorch常规命令

    try: os.mkdir('./model') except Exception: pass try: ...

  • Java线程——Thread

    线程Thread Java的线程对应OS中的线程,相当于对OS线程的封装 UncaughtExceptionHan...

  • 2019-08-27

    mysql thread并非操作系统上的真实线程,只是mysql中的一个对象,但是会与os thread(操作系统...

  • nfs-ganesha - thread model - fri

    fridgethr(fridge thread)是一个叫Philippe设计的工作者/消费者模型,在2.7的修改中...

  • nfs-ganesha - thread model - wor

    work pool 内部维护一个队列,生产者调用work_pool_submit将entry插入队列,有多个线程作...

  • Thread

    概述 Java线程映射到OS的线程 代码版本:oracle jdk 1.8 java.lang.Thread im...

  • 线程同步异步nio总结

    线程模型:同步 n,异步 2n,nio n+1,aio n (os thread execute user thr...

网友评论

      本文标题:OS Thread Model

      本文链接:https://www.haomeiwen.com/subject/kktapctx.html