zoukankan      html  css  js  c++  java
  • Go并发编程

    Go并发编程

    2017.5.1

    并发编程基础

    串行程序与并行程序

    串行程序是指只能被顺序执行的指令列表
    并行程序是指可以被并发执行的两个及以上的串行程序的综合体
    并发程序与并行程序

    并发程序是指可以被同时发起执行的程序,并发程序代表了所有可以实现并发行为的程序
    并行程序是指可以在并行的硬件上执行的并发程序


    并发程序内部的交互

    并发程序内部可以分为多个部分,每个部分都可以看作是一个串行程序
    多个串行程序可能会对共享的资源进行访问,也可能它们之间需要传递一些数据
    在这种情况下,我们需要协调它们的执行,这就涉及到了同步
    同步的作用是避免在并发访问共享资源时可能发生的冲突,以确保有条不紊地传递数据

    在同一时刻,某个资源应该只被一个程序占用
    传递数据是并发程序内部的另一种交互方式,也成为并发程序内部的通信
    实际上,内部通信的方式不仅仅有同步,也有异步方式对通信进行处理
    异步能够让数据不加延迟地发送给数据接收方,即使数据接收方没有做好准备,也不会造成发送方的等待
    数据会被临时存放在通信缓存中,通信缓存是一种数据结构,是一种可以同时被多个程序使用的特殊共享资源

    多进程编程

    进程间通信的方式被称为IPC(Inter-Process Communication)
    在Linux中,IPC可以分为三类:

    1. 基于通信的IPC方法
      1.1 数据传送:管道pipe传送字节流,消息队列message queue传送结构化的消息对象
      1.2 共享内存:共享内存shared memory最快

    2. 基于信号的IPC方法
      信号signal,唯一的一种异步IPC方法

    3. 基于同步的IPC方法
      信号量semaphore

    Go支持管道、信号、socket

    进程

    进程process维护了应用程序运行时的内存地址空间、文件和设备的句柄以及线程
    进程也是操作系统进行资源分配的一个基本单位

    pid := os.Getpid()          // 获取进程ID
    ppid := os.Getppid()        // 获取父进程ID
    

    多个进程同时对一个资源进行访问,很可能相互干扰,这种干扰称为竞态条件race condition
    Go的并发变成模型更加成熟先进,目标在于大幅减少程序产生竞态条件的可能
    执行过程中不能中断的操作称为原子操作atomic operation,所有的系统调用都属于原子操作
    只能被串行化访问或执行的某个资源或某段代码称为临界区critical section
    保证只有一个进程或线程在临界区之内的做法称为互斥mutex
    实现互斥的方法必须确保排他原则,sync包包含了对互斥的支持

  • 相关阅读:
    CentOS安装部署Nodejs
    CentOS安装部署Git
    CentOS安装部署Mysql 5.7
    CentOS 7 安装Java环境(脚本一键式安装)
    Java技术 | 细谈Java中UUID的简单了解与使用
    Navicat Premium 版本 12.1 激活成永久
    Java技术 | 细谈 Java 8 中的 Base64
    安装部署Elastic Search
    从零开始搭建linux下laravel 5.5所需环境(二)
    从零开始搭建linux下laravel 5.5所需环境(一)
  • 原文地址:https://www.cnblogs.com/Juntaran/p/6794438.html
Copyright © 2011-2022 走看看