并发:简介

并发:简介

什么是并发?

顺序执行:一个程序独占 CPU 资源,直到程序结束才释放 CPU,让出使用权给另一个程序。

并发执行:在较长时间片多个程序共享 CPU 资源,短时间片仍然是单程序占据 CPU,OS 进行调控切换。

为什么需要并发?

背景:硬件发展,计算能力发展,旧有批处理机制浪费资源。
效率!效率!还是效率!

  1. 最初的并发目的就是提高资源利用率和系统吞吐量。
  2. 后来的分时系统对及时响应的要求也需要并发支持。

如何实现并发?

OS 需要能够调控切换程序的运行,单纯的代码段并不能完成这个要求。所以出现了进程,线程。

进程

进程定义:进程是对程序一次执行过程的抽象,包括其程序段、相关数据段和 PCB(Process Control Block, 进程控制块)组成。其中 PCB 记录进程的各种信息。

进程特征:动态性,独立性,并发性,异步性。

  • 动态性:进程实质是程序的一次执行过程,所以是其最基本特征
  • 独立性:传统 OS 中,进程是独立获取资源,独立执行,独立接受调度的基本单位;
  • 并发性:多个进程同时存在与内存中,一段时间内同时运行;
  • 异步性:进程互相独立,已不可预知的速度运行。

线程

目的:减少进程上下文切换造成的资源浪费。

实现方法:将资源获取和调度执行分开

  • 使进程成为拥有资源的基本单位,不再是调度的基本单位,不再被频繁切换
  • 进程内部开辟线程来执行程序,线程间共享资源,线程作为调度的基本单位
  • 多个线程的状态存储在共享资源内,切换时的消耗小于进程切换,减少了系统消耗
    single-threaded-and-multi-threaded-address-spaces

而且线程更适合多处理机进行调度,单进程多线程,不同线程在不同处理器上执行无疑会加快任务完成,而单进程单线程情况下无论有多少个处理机,进程只在一个处理机上执行。

如此,进程成为资源的分配单位,线程是 OS 调度的基本单位
所以下文中主要以线程为主要研究对象

遇到的问题

  • 核心问题:调度不可控
  • 内存共享导致的问题
    这两个问题会导致进程间互相影响,程序运行基本不可再现。

对现代操作系统下的并发编程还存在以下问题

  • 原子性丧失:“程序 (甚至是一条指令) 独占处理器执行” 的基本假设在现代多处理器系统上不再成立。”
  • 顺序丧失:编译器翻译时的优化会打乱源码语句顺序
  • 可见性丧失:
    • 现代处理器可以理解为动态编译器,甚至会将一条指令“编译”为更小的微操作,乱序执行。
    • 多处理器造成的处理器之间的即时可见性丧失。

问题的解决:互斥同步

互斥

对于要操作同一个资源的多个线程,通过互斥保证某一时间仅能有一个线程有操作权限
例如:宿舍 6 人,某一时刻仅 1 人能上厕所。

同步

同步:两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。

线程同步:在某个时间点共同达到互相已知的状态,进行进程间的协作。
例如:NPY洗完头就一起去吃饭/打完这局游戏就一起去吃饭


参考资料:
[1] OSTEP
[2] OSTEP Chinese
[2] NJU OS PPT
[3] NJU OS 课程

posted @   全无青年  阅读(140)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示