多线程

###一、什么是线程???###
要了解什么是多线程那得先知道什么是线程?
所谓的线程就是程序里面的一个执行线路。或者说线程是一个进程内部的控制序列。其实线程是进程模拟的(Linux环境下)所以线程也叫做轻量级进程。
###二、线程VS进程###
线程与进程之间的联系

  • 进程是资源分配的最基本单位
  • 线程是系统调度的基本单位(CPU是以PCB为单位调度的)
  • 每一个进程中至少有一个线程
  • 一个进程是一个线程组,线程组方便管理进程
  • 进程是具有一个或者多个执行流的线程组
  • 同一进程中的多个线程可以并发执行,在多处理的情况下可以同时并行
    并行:多个处理器或者多核的处理器同时处理多个不同的任务(多个人同时吃多个面包)
    并发:一个处理器同时处理多个任务(一个人吃好多面包)
    进程和线程的优缺点对比:
  • 线程的创建销毁成本相较于进程更低
  • 线程之间的数据共享很简单,进程之间的数据共享需要投入更多(比如:创建管道或者消息队列等)
  • 创建线程的速度要快于创建进程
  • 线程之间的上下文切换一般比进程也更短
  • 线程的调度成本比进程更低(切换成本低,因为多个线程可能属于同一个进程,不需要切换页表,保存线程的数据)
  • 线程之间不像进程之间是独立的,如果一个线程中出现了bug有可能会波及到其他线程甚至会导致整个进程退出
    上面所对比的线程和进程的优缺点,都是因为线程之间的某些数据是共享的,一个进程中的多个线程共享,着多个线程竞争同一个宿主进程中的虚拟空间。
    线程共享的数据:
  • 同一块地址空间,因此代码段和数据段都是共享的
  • 文件描述符
  • 每种信号的处理方式
  • 当前的工作目录
  • 用户id和组id
  • 进程id和父进程id
  • 文件权限
  • nice值
    线程之间所有的数据及资源并不都是共享的,各个线程也有他们的小隐私:
  • 线程id
  • errno错误号
  • 线程自己的栈
  • 信号屏蔽字
  • 实时调度策略和优先级
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值