码迷,mamicode.com
首页 > 编程语言 > 详细

操作系统---线程

时间:2017-11-06 19:03:11      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:出现   资源   时间   注意   多线程模型   不能   共享   thread   保存   

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

 

操作系统---线程

标签:出现   资源   时间   注意   多线程模型   不能   共享   thread   保存   

原文地址:http://www.cnblogs.com/sun1993/p/7778073.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!