操作系统 --- 多线程 Multithreading

本文详细介绍了线程和多线程的概念,强调了线程在解决进程缺点中的作用,以及线程的优缺点。内容涵盖线程的资源、同步线程与异步线程的差异,并详细讨论了用户级线程和内核级线程,包括它们的创建、切换和区别,以及在多核处理器中的应用。
摘要由CSDN通过智能技术生成

什么是线程和多线程

进程的缺点

  • 对于多个相关的进程,共享资源比较麻烦(参见进程间的通信), 并且切换进程需要同时切换资源和内存,代价很高. 比如一个浏览器的每一个功能都是一个独立进程的话, 那么这个浏览器的运行效率就会很低.

线程(Thread)

  • 为了解决进程的缺点, 可以在同一个进程中创建多个轻量级的"进程",这些"轻量级"的进程可以共享资源
  • 轻量级的"进程"就是线程(Thread)
  • 同一进程中运行多个线程就是多线程
  • 多线程可以保证线程并发实现多任务同时操作, 比如一个浏览器
    在这里插入图片描述

线程的优点

  • 在同一进程中可以同时执行多个任务,一个线程负责一个任务
  • 多个线程可以直接共享资源, 避免了进程间复杂的资源共享机制(比如shared memeory,named pipe等)
  • 在多核计算机中, 内核级多线程可以在不同的CPU上并行运行,但是单线程进程只能使用一个CPU

线程和进程的区别

  • 线程是进程的最小组成单位, 任何一个进程都至少有一个线程
  • 进程是在内核中的,因为需要给进程分配内存资源等核心资源,所以没有用户级进程,但是有用户级线程和内核级线程
  • 用户及线程一般由编程语言控制,最后由可执行文件执行
  • 切换进程需要同时资源, 代价很高 。而一个进程内的线程共用资源,避免了切换进程的代价同时保留了并发的优点
    在这里插入图片描述

关于线程的资源

线程独有的资源

  • 一般来说一个线程就是一个函数,所以线程运行的本质就是函数运行
  • 所以一个线程有自己的
  • stack (存放函数运行时需要的信息,如参数,返回地址等)
  • register (存放局部变量)
  • program counter
  • 以上这些被叫做 thread context

线程共享的资源

  • 线程共享了进程剩下的资源,包括
  • 堆区: 动态分配的内存
  • 代码区: 我们写的代码,更准确的是编译后的可执行机器指令
  • 数据区:全局变量
  • 打开的文件: 进程打开的文件也可以被所有的线程使用,这也属于
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值