chapter02_进程与线程_2_线程

  • 使用多线程的原因

    (1) 一个应用进程中可能发生多种活动,有些活动可能会被阻塞,多线程可以简化程序设计

    (2) 线程比进程__轻量__,创建、撤销、转换线程的开销都更小(创建、撤销进程的开销包括分配和回收资源,切换进程的开销包括保存当前进程CPU状态和设置新进程CPU状态,而切换线程只需要保存少量寄存器)

    (3) 如果应用中存在大量IO操作,使用多线程可以加快应用程序的执行速度(如果应用程序是计算密集型且为单核处理器,那么多线程就没太大意义)

    (4) 多CPU系统中,多线程可以实现并行计算

    (5) 有些情况下只能使用多线程

    例如,三个活动需要共享一个打开的文件,这个文件的内容放在内存中。由于不同的进程有不同的内存地址空间,所以使用多进程无法实现

  • 某个活动的三种实现方式

    多线程

      有并行性, 阻塞系统调用
    

    单线程进程

      无并行性,阻塞系统调用
    

    有限状态机

      有并行性,非阻塞系统调用(依靠中断实现)
    
  • 理解进程的一种角度:用某种方法将相关的资源集中在一起

    因此, 多个线程可以理解为 它们共享同一个地址空间和其他资源;

    多个进程可以理解为 它们共享物理内存、磁盘、打印机和其他资源

  • 通过在多个进程之间来回切换,系统制造了不同的顺序进程并行运行的假象;

    CPU在线程之间的快速切换,制造了线程并行运行的假象

  • (1) 一个进程中所有线程__共享__的内容

    1° 地址空间

    2° 全局变量

    3° 打开文件

    4° 子进程

    5° 即将发生的报警

    6° 信号与信号处理程序

    7° 账户信息

    (2) 每个线程中__独立__的内容

    1° 程序计数器PC

    2° 寄存器

    3° 堆栈

    4° 状态

  • 一个线程可能的状态

    1° 运行

    2° 就绪

    3° 阻塞

    4° 终止

  • 线程调用的方法

    1° 创建 create

    2° 结束 exit

    3° 等待一个特定的线程退出 join

    4° 让出 yield

  • 实现线程包的方式

    (1) 在用户空间实现

    优点:快、可定制性调度算法

    缺点:实现阻塞系统调用难、页面故障问题、没有时钟中断无法轮转调度

    (2) 在内核实现(Java用的这种)

    优点:避免了用户空间实现方式的很多难题

    缺点:慢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值