博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统---线程
阅读量:5347 次
发布时间:2019-06-15

本文共 968 字,大约阅读时间需要 3 分钟。

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 多对多模型:是两种的综合,可以将多个用户线程对应到多个内核线程。

 

转载于:https://www.cnblogs.com/sun1993/p/7778073.html

你可能感兴趣的文章
AutoCAD如何倒角 倒圆角 倒直角
查看>>
Office PPT中如何插入flash
查看>>
C# Fade Form Effect With the AnimateWindow API Function
查看>>
golang多维数组的切片
查看>>
IP 网际协议
查看>>
C语言_第五章__实践(密码转换)
查看>>
docker 容器后台运行命令
查看>>
jquery 获取css position的值
查看>>
面向对象的程序设计
查看>>
a标签添加点击事件
查看>>
Context.startActivity出现AndroidRuntimeException
查看>>
Intellij idea创建javaWeb以及Servlet简单实现
查看>>
代理网站
查看>>
Open multiple excel files in WebBrowser, only the last one gets activated
查看>>
FFmpeg进行视频帧提取&音频重采样-Process.waitFor()引发的阻塞超时
查看>>
最近邻与K近邻算法思想
查看>>
【VS开发】ATL辅助COM组件开发
查看>>
FlatBuffers In Android
查看>>
《演说之禅》I & II 读书笔记
查看>>
thinkphp3.2接入支付宝支付接口(PC端)
查看>>