前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

线程

作者头像
zy010101
发布2019-05-25 19:55:19
4130
发布2019-05-25 19:55:19
举报
文章被收录于专栏:程序员程序员

现代的操作系统都提供了单个进程包括多个控制线程的特性。

线程,有时候称为轻量级进程(lightweight process,LWP),是CPU使用的基本单元;它包含了线程ID,程序计数器,寄存器集合以及堆栈。它与属于同一进程的其他线程共享代码段,数据段和其他的操作系统资源。

现代的应用程序通常都是一个具有多线程的独立进程。例如,Chrome浏览器。当我们用它打开一个网页的时候,它是这样工作的,一个线程从网络接受数据,另一个线程在负责显示文本或者图片,还可能有另一个线程在显示视频。这样我们看到网页的时候才不会等待很长时间。如果是单线程进程,那么它可能的执行的过程是这样的。先把所有的数据下载完成,然后再来处理文本显示和图片显示,接着处理视频文件。这样的方式显然是用户不想看到的。所以多线程的产生是必然的。

多线程编程的优点:

  1. 响应度高:一个交互式应用程序采用多线程,即使部分阻塞,它仍然能够继续执行,使用户有良好的体验。
  2. 资源共享:线程默认共享它们所属进程的内存和资源。代码共享的优点是允许一个应用程序在同一地址空间有多个不同的活动线程。
  3. 经济:创建一个新的线程和创建一个新的进程相比较会更容易。因为线程只需要切换堆栈。
  4. 多处理器的利用:多线程能使得每个线程并行运行在不同的处理器上。多线程是完美契合多处理器的。单处理器只能在线程之间快速切换来达到一个假象。但是实际上每一时刻只能运行一个线程。

用户级线程

用户级线程无需内核支持,它是通过线程库提供的创建,调度和管理的。但是这样有一个缺点,就是内核不知道用户级线程的存在。如果内核是单线程的,那么用户级线程的执行如果引起阻塞,那么将会引起整个进程阻塞。不会切换到下一个进程。

内核级线程

内核级线程由操作系统直接支持,内核在其空间内执行线程创建,调度和管理。由于线程也要在内核中注册,所以比起用户级线程,内核级线程的创建和管理要慢一些。但是好处是当一个线程阻塞时,内核能调度该进程内的另外一个线程来执行。而不是直接导致该进程阻塞,切换到下一个进程去执行。

多线程模型

  1. 多对一模型 将多个线程映射到内核线程。线程管理在用户态进行,但是容易引起阻塞。如图所示,任意时刻只能有一个线程访问内核。在不支持内核级线程的OS上实现的用户级线程都是这种模型。
  1. 一对一模型 每个用户级线程映射到对应的内核线程。它能在线程阻塞时继续执行下一个线程。但是这样的缺点是用户线程都有对应的内核线程。这样的模型必须限制线程的数量。
  1. 多对多模型 多对多模型多路复用了许多用户级线程到同样数量的或更小数量的内核级线程上。这种模型允许开发者创建任意多的线程,但是内核一次只能调度一个,因此并发性并未增加。

多核CPU和多处理器的区别

多核CPU它本质上是一个处理器,只不过有多个核心。例如我们手机处理器现在大多数是8核心的。但是它还是单处理器。多核解决了缓存分离和数据冲突等引起的错误。

多核是共用了MMU和Cache等系统资源,但是多处理器则是每个处理器都有一套属于自己的MMU和Cache。没有多核就没有多线程。多核的模型完美处理了多线程。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年10月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用户级线程
  • 内核级线程
  • 多线程模型
    • 多核CPU和多处理器的区别
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档