Golang从入门到放弃200629--并发编程

  • 参考资料
    Go语言并发之道
    Go并发编程实战

  • 并发编程基础

    • 串行程序与并发程序
      串行程序 只能被顺序执行的指令列表
      并发程序 可以被并发执行的两个及以上的串行程序的综合体
      多元程序和多元处理时串行程序得以并发甚至并行运行的基础支撑

    • 并发程序与并行程序
      并发程序 可以被同时发起执行的程序
      并行程序 被设计成可以在并行的硬件上执行的并发程序
      并发程序代表了所有可以实现并发行为的程序,其中包含了并行程序

    • 并发程序的不确定性
      串行程序中所有的代码都是固定的,而并发程序中只有部分代码是有序的。也就是说
      其中一些代码的执行顺序并没有明确指定,这一特性被称为不确定性。

    • 并发程序内部的交互
      并发程序内部会被划分为多个部分,每个部分都可以看作一个串行程序。在这些串行
      程序之间,可能会存在交互的需求,如:

      1. 多个串行程序豆要对一个共享的资源进行访问
      2. 相互之间需要传递一些数据

      在这些情况下,就需要协调他们执行,这就涉及到了同步。
      同步的作用是避免在并发访问共享资源时可能发生的冲突,以确保有条不紊的传递数
      据。

      根据同步的原则,程序如果想使用一个共享资源,首先必须请求该资源并获取到对它
      的访问权。当程序不再需要某个资源的时候,它应该放弃对该资源的访问权。程序对
      该资源的访问不该导致其它正在访问该资源的程序中断,而应该等到那个程序释放该
      资源后再进行请求。也就是说,在同一时刻,某个资源应该只被一个程序占用。

      传递数据是并发编程的另一种交互方式,也称并发程序内部的通信。同步/异步的方
      式都可以对通信进行管理

  • 多进程编程

    • Linux中进行之间的通信方式(IPC)

      1. 基于通信的IPC方法

        • 以数据传送为手段的IPC方法
          包含:
          管道(pipe) : 用来传送字节流
          消息队列(message queue) : 用来传送结构化的消息对象

        • 以共享内存为手段的ICP方法
          共享内存区(share memeory) – 最快的IPC方法

      2. 基于信号的IPC方法
        操作系统的信号(signal)机制 – 唯一的一种异步IPC方法

      3. 基于同步的IPC方法
        最重要的是信号量(semaphore)

      Go并发编程实战支持的IPC方法有管道、信号和socket

    • 进程、线程、协程

      • 进程

        1. 操作系统进行资源分配和调度的一个基本单位,有自己的独立内存空间
        2. 通信:通过进程间通信来通信
        3. 优点:相对比较稳定安全
        4. 缺点:创建、撤销和上下文进程间切换开销比较大
      • 线程

        1. CPU调度和分派的基本单位
        2. 基本不拥有系统资源,与同线程其它进程共享线程所有资源
        3. 通信:线程间通信通过共享内存
        4. 优点: 资源开销比较少,上下文之间切换很快
        5. 缺点:相比进程不够稳定,容易丢失数据;
          对于某些独占性资源存在锁机制,处理不当可能会产生死锁
      • 协程

        1. 用户态的轻量级线程,协程的调度完全由用户控制
        2. 通信:建议channel通信
        3. 优点:上下文切换非常快
        4. 缺点:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值