并发、进程、线程的基本概念和综述

并发

  • 两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务。
  • 以往计算机为单核CPU(中央处理器):某一时刻只能执行一个任务,由操作系统调度,每秒钟进行多次“任务切换”,这并不是真正的并发。同时任务切换需要保存与恢复任务上下文,存在时间开销。
  • 随着硬件发展,出现了多处理器(多核)计算机,能够实现真正的并行任务处理(硬件并发)。
  • 使用并发的原因:可以同时处理多个任务,提高处理性能。

001.png

程序

  • 程序是计算机存储系统中的数据文件

    • 源代码程序:文本文件,描述程序行为和功能
    • 可执行程序:二进制文件,直接加载并执行

image.png

进程

  • 广义概念:程序关于某个数据集合的一次运行活动
  • 侠义概念:程序被加载到内存中执行得到进程

程序和进程的区别

  • 程序是硬盘中静态的文件
  • 进程是内存中动态的运行实体

进程和线程的区别

  • 一个程序可能对应多个进程

    • 一个程序多次运行,每次产生一个进程
  • 一个进程可能包含多个程序

    • 一个程序依赖多个其它动态库
在当代操作系统中,资源分配的基本单位是进程;而 CPU 调度执行的基本单位是线程

线程

  • 进程内的一个执行单元
  • 操作系统中一个可调度实体
  • 进程中相对独立的一个控制流序列

深入理解进程和线程

  • 进程中可以存在多个线程共享进程资源
  • 线程是被调度的执行单元,而进程不是调度单元
  • 线程不能脱离进程单独存在,只能依赖于进程运行
  • 线程有生命期,有诞生和死亡
  • 任意线程都可以常见其它新的线程
  • 每个进程都有一个唯一的主线程(进程被创建时,主线程启动执行 main 函数)

image.png

002.png

并发的实现方法

  • 通过多个进程实现并发。
  • 在单独的进程中,写代码创建除了主线程之外的其它线程实现并发。

003.png

多进程并发

  • 例:启动word和网页浏览器同时处理不同任务。
  • 进程之间的通讯方式

    • 同一电脑:管道、文件、消息队列、共享内存、socket通讯
    • 不同电脑:socket 通讯

多线程并发

  • 每个线程可有自己独立的运行路径
  • 同一进程中所有线程共享地址空间(共享内存)。全局变量、指针、引用等可以在线程之间传递,通讯开销远远小于进程。
  • 线程并不是越多越好,线程需要独立的堆栈空间,同时线程切换时会消耗执行时间。

总结

  • 多进程并发和多线程并发可以混合使用,但建议优先考虑多线程技术。

C++11 新标准线程库

  • 经典开发方式

    • indow: CreateThread(), _beginthread(),_beginthreadexe()
    • linux : pthread_create();
    • posix thread (跨平台,需要最基础配置)
  • C++11及后续

    • 语言层面支持多线程,意味着可跨平台,减少开发人员工作两。

TianSong
734 声望138 粉丝

阿里山神木的种子在3000年前已经埋下,今天不过是看到当年注定的结果,为了未来的自己,今天就埋下一颗好种子吧