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包包含了对互斥的支持

转载于:https://www.cnblogs.com/Juntaran/p/6794438.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值