• 操作系统---线程


    1.线程引入的原因?

      1.1 对于现实世界存在的一个问题:MP3播放--大的任务可以划分为3个子任务---先读数据(属于IO绑定),解压数据(属于CPU绑定),最后播放;想提高

    程序的并发性,可以通过使用多进程实现,每个进程负责一个任务,但是这样开销大,而且还要考虑资源共享,和进程之间的协作,所以操作系统提出了

    线程概念---就是表示进程中的一条执行流(可并发执行的小任务)。进程中可以拥有多个线程,线程共享进程资源,线程有自己私有的栈,保存执行情况。

      1.2 线程的提出是为了提高进程的并发性。将进程的两个属性分开,进程依旧是资源分配的单位,线程是调度的单位(在支持线程的OS中)。

      1.3 需要注意的是并非所有的程序都应该设计成多线程程序,要根据程序的逻辑划分,确定哪些子任务是异步,那些子任务是同步的。

    2.线程的分类

      2.1 用户级线程:最初操作系统是不支持线程的,但是为了用户的需求,又不能在短期内修改操作系统内核在内核态实现线程,所以只有先在用户

      态通过线程库实现线程。eg:Java Thread

      用户态线程特点:线程的创建、调度、TCB的维护都由用户态控制。OS内核态完全不知道用户态是多线程,同一个进程的线程之间切换速度快。

      用户态线程缺点:某个线程的阻塞,导致整个进程的所有线程阻塞;不支持基于线程的处理机抢占;CPU调度是按照进程来调度,线程获得时间片短。

    注意:Java的JVM是运行在用户态的,Java的线程就是用户态线程。

      2.2 内核态线程:重写操作系统内核,在内核态支持线程,也就是说,线程的创建,TCB维护、线程切换等所有有关线程的操作都必须在内核态完成。

    3.多线程模型

      3.1 一对一模型:真正的实现了线程是最基本的调度单位,内核态维护线程TCB。在支持线程的OS中,推荐使用这种。

      3.2 多对一模型:其实属于内核态不支持线程,只在用户态实现了线程,调度的单位其实还是进程,进程获的的时间片在分给进程中的线程。

    同一个进程的线程切换速度快,但会出现一个阻塞,全部阻塞的情况。

      3.3 多对多模型:是两种的综合,可以将多个用户线程对应到多个内核线程。

  • 相关阅读:
    ashx session
    jquery-tmpl中添加js判断
    问题与解决方案
    VS2013打包发布 winform程序
    Sorket通信
    加载页面菜单,原来也可以这么写
    pm2模块编写入门
    使用PouchDB来实现React离线应用
    让fetch也可以timeout
    使用JSON Schema来验证接口数据
  • 原文地址:https://www.cnblogs.com/sun1993/p/7778073.html
Copyright © 2020-2023  润新知