Go并发编程
2017-05-02 03:36
239 查看
Go并发编程
Go并发
Go并发编程实战
2017.5.1
并发编程基础
串行程序与并行程序
串行程序是指只能被顺序执行的指令列表并行程序是指可以被并发执行的两个及以上的串行程序的综合体
并发程序与并行程序
并发程序是指可以被同时发起执行的程序,并发程序代表了所有可以实现并发行为的程序
并行程序是指可以在并行的硬件上执行的并发程序
并发程序内部的交互
并发程序内部可以分为多个部分,每个部分都可以看作是一个串行程序多个串行程序可能会对共享的资源进行访问,也可能它们之间需要传递一些数据
在这种情况下,我们需要协调它们的执行,这就涉及到了同步
同步的作用是避免在并发访问共享资源时可能发生的冲突,以确保有条不紊地传递数据
在同一时刻,某个资源应该只被一个程序占用
传递数据是并发程序内部的另一种交互方式,也成为并发程序内部的通信
实际上,内部通信的方式不仅仅有同步,也有异步方式对通信进行处理
异步能够让数据不加延迟地发送给数据接收方,即使数据接收方没有做好准备,也不会造成发送方的等待
数据会被临时存放在通信缓存中,通信缓存是一种数据结构,是一种可以同时被多个程序使用的特殊共享资源
多进程编程
进程间通信的方式被称为IPC(Inter-Process Communication)在Linux中,IPC可以分为三类:
基于通信的IPC方法
1.1 数据传送:管道pipe传送字节流,消息队列message queue传送结构化的消息对象
1.2 共享内存:共享内存shared memory最快
基于信号的IPC方法
信号signal,唯一的一种异步IPC方法
基于同步的IPC方法
信号量semaphore
Go支持管道、信号、socket
进程
进程process维护了应用程序运行时的内存地址空间、文件和设备的句柄以及线程进程也是操作系统进行资源分配的一个基本单位
pid := os.Getpid() // 获取进程ID ppid := os.Getppid() // 获取父进程ID
多个进程同时对一个资源进行访问,很可能相互干扰,这种干扰称为竞态条件race condition
Go的并发变成模型更加成熟先进,目标在于大幅减少程序产生竞态条件的可能
执行过程中不能中断的操作称为原子操作atomic operation,所有的系统调用都属于原子操作
只能被串行化访问或执行的某个资源或某段代码称为临界区critical section
保证只有一个进程或线程在临界区之内的做法称为互斥mutex
实现互斥的方法必须确保排他原则,sync包包含了对互斥的支持
相关文章推荐
- Go语言并发编程
- Go -- 并发编程的两种限速方法
- Go程序设计3——并发编程
- Go并发编程总结
- Go并发编程——channel
- Go的并发编程简述
- Go并发编程实战 第2版.pdf
- 再谈CERL:详论Go与Erlang的并发编程模型差异
- go基本语法学习笔记之并发编程
- go语言并发编程-----Goroutines 并发模式
- go语言并发编程
- 可视化学习Go并发编程
- Go语言 7 并发编程
- Go并发编程之协程
- Go基础编程:并发编程—概述
- Go基础编程:并发编程—select
- Go基础编程:并发编程—goroutine
- 可视化学习Go并发编程
- Go并发编程之goroutine
- 10 go并发编程-上