深入理解计算机:并发编程

并发编程
简介
  • 并发

    • 如果逻辑控制流,在时间上重叠,那么它们就是并发的
  • 应用级并发的作用

    • 访问慢速I/O设备
    • 与人交互
    • 通过推迟工作以降低延迟
    • 服务多个网络服务
    • 在多核机器上进行并行计算
  • 三种构造并发程序的方法

    • 进程
      • With this approach, each logical control flow is a process that is scheduled and maintained by the kernel. Since processes have separate virtual address spaces, flows that want to communicate with each other must use some kind of explicit interprocess communication (IPC) mechanism.
    • I/O多路复用
      • This is a form of concurrent programming where applications explicitly schedule their own logical flows in the context of a single process. Logical flows are modeled as state machines that the main program explicitly transitions from state to state as a result of data arriving on file descriptors. Since the program is a single process, all flows share the same address space.
    • 线程
      • Threads are logical flows that run in the context of a single process and are scheduled by the kernel. You can think of threads as a hybrid of the other two approaches, scheduled by the kernel like process flows and sharing the same virtual address space like I/O multiplexing flows.
基于进程的并发编程
  • base knowldge

    • 线程是最小执行的单位,进程是最小资源分配的单位
  • 概念

    • 使用fork()、exec()、waitpid()等函数,对进程进行控制
    • 一个构造并发服务器的自然方法是,在父进程中接受客户端连接请求,然后创建一个新的子进程来为每个客户端提供服务
  • 过程

    • 第一步:服务器接受客户端的连接请求
    • 第二步:服务器派生一个子进程为这个客户端服务
    • 第三步:服务器接受另一个连接请求

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 优劣
    • 进程有独立的地址空间,不会覆盖另一进程的虚拟存储器,避免许多令人迷惑的错误。
    • 独立的地址空间使得进程共享状态信息变得更加的困难,为了共享信息,必须使用显示的IPC(进程间通信)机制。
    • 另一个缺点是,速度较慢,因为进程控制和IPC的开销很高。
基于I/O多路复用的并发编程
  • 描述
    • 创建自己的逻辑流,并利用I/O多路复用来显示地调度流,因为只有一个进程,所有的流共享整个地址空间。
    • 使用select函数,要求内核挂起进程,只有一个或多个I/O事件发生后,才将控制返回给应用程序。
基于线程的并发编程
  • 线程

    • 就是运行在进程上下文中的逻辑流
    • 一个进程可以有多个线程
    • 线程由内核调度
    • 每个线程都有它自己的线程上下文,包括一个唯一的整数线程ID、栈、栈指针、程序计数器、通用目的寄存器和条件码
    • 所有运行在一个进程里的线程共享该进程的整个虚拟地址空间
  • 线程执行模型

    • 主线程、对等线程、对等池(线程池)
    • 一个线程的上下文比进程的上下文小得多,也比进程的上下文切换快得多
    • 和一个进程相关的线程组成一个对等池,独立于其他线程创建的线程
    • 主线程和其他线程的区别仅仅在于它总是进程中第一个运行的线程
    • 一个线程可以杀死它的任何对等线程,或者等待它的任何对等线程终止
    • 每个对等线程读写相同的共享数据
      在这里插入图片描述
  • Posix线程
    在这里插入图片描述

  • 创建线程
    在这里插入图片描述

  • 终止线程
    在这里插入图片描述

  • 回收已终止的线程
    在这里插入图片描述

  • 分离线程
    在这里插入图片描述

  • 初始化线程
    在这里插入图片描述

共享变量
信号量
并行性
竞争与死锁
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值