zoukankan      html  css  js  c++  java
  • 线程模型及线程池原理

    线程

    • 调度CPU的最小单元,也叫轻量级进程LWP(Light Weight Process)

    • 两种线程模型

      • 用户级线程ULT:用户程序实现,不依赖操作系统核心,引用提供创建、同步、调度和管理线程的函数来控制用户线程

        • 优点:不需要用户态/核心态切换,速度快

        • 缺点:内核对ULT无感知,线程阻塞则进程(包括它的所有线程)阻塞

      • 内核级线程KLT:系统内核管理线程,内存保存线程的状态和上下文信息,线程阻塞不会引起进程阻塞,在多处理器系统上,多线程在多处理器上并行运行,线程的创建、调度和管理由内核完成,效率比ULT要慢,比进程操作快

        image-20200812104436071

        操作系统在运行时会对运行空间(内存条)做逻辑划分,分为用户空间和内核空间,用户程序无法随意访问内核空间,必须通过系统向外暴露的接口进行访问

    • java线程

      • 使用的KLT模型:java线程创建时依赖于系统内核,通过JVM调用系统库创建内核线程,内核线程与java-thread是1:1的映射关系

        image-20200812112101620

        由操作系统来调度,哪个线程由cpu的哪个核来执行

     

    线程池原理

      1. 为什么使用线程池?

        线程是稀缺资源他的创建和销毁是相对偏重且耗资源的操作,且java线程依赖于内核线程,创建线程需要进行操作系统状态切换,为避免资源过度消耗需设法重用线程执行多个任务,线程池就是一个线程缓存,负责对线程进行统一分配、调优与监控(创建一个线程大概在JVM栈内存分配1M内存空间,并需要切换用户态/内核态,并需要在内核空间分配空间)

      2. 什么时候使用线程池?

        单个任务处理时间很短,但需要处理任务的数量很大

      3. 线程池优势?

        • 重用存在的线程,减少线程创建,消亡的开销,提高性能

        • 提高响应速度,当任务到达时可以不必等待线程创建立即执行

        • 提高线程可管理性,可统一分配,调优,监控

      4. 线程池五种状态

        image-20200817161901548

      5. 执行流程

        image-20200817180514110

        • 任务首先提交给核心线程,当核心线程都在占用时,新任务放入队列,注意队列已满后,再提交新任务并不是直接提交给非核心任务执行,而是创建非核心线程,非核心线程执行队列中的任务,新任务再放入队列中

        • 核心线程是否会销毁取决于使用者设置

         

  • 相关阅读:
    python中创建函数和调用函数
    python中函数的参数
    python 函数中的关键字参数
    python中创建集合
    python中函数文档
    python中函数形式参数、实际参数、位置参数、关键字参数
    python中不可变集合
    我是谁?(程序员版)
    《林阴小路》疏辨
    用户接口常用术语英语德语对照
  • 原文地址:https://www.cnblogs.com/sbrn/p/13519573.html
Copyright © 2011-2022 走看看