-
参考资料
Go语言并发之道
Go并发编程实战 -
并发编程基础
-
串行程序与并发程序
串行程序
只能被顺序执行的指令列表
并发程序
可以被并发执行的两个及以上的串行程序的综合体
多元程序和多元处理时串行程序得以并发甚至并行运行的基础支撑 -
并发程序与并行程序
并发程序
可以被同时发起执行的程序
并行程序
被设计成可以在并行的硬件上执行的并发程序
并发程序代表了所有可以实现并发行为的程序,其中包含了并行程序 -
并发程序的不确定性
串行程序中所有的代码都是固定的,而并发程序中只有部分代码是有序的。也就是说
其中一些代码的执行顺序并没有明确指定,这一特性被称为不确定性。 -
并发程序内部的交互
并发程序内部会被划分为多个部分,每个部分都可以看作一个串行程序。在这些串行
程序之间,可能会存在交互的需求,如:- 多个串行程序豆要对一个共享的资源进行访问
- 相互之间需要传递一些数据
在这些情况下,就需要协调他们执行,这就涉及到了同步。
同步的作用是避免在并发访问共享资源时可能发生的冲突,以确保有条不紊的传递数
据。根据同步的原则,程序如果想使用一个共享资源,首先必须请求该资源并获取到对它
的访问权。当程序不再需要某个资源的时候,它应该放弃对该资源的访问权。程序对
该资源的访问不该导致其它正在访问该资源的程序中断,而应该等到那个程序释放该
资源后再进行请求。也就是说,在同一时刻,某个资源应该只被一个程序占用。传递数据是并发编程的另一种交互方式,也称并发程序内部的通信。同步/异步的方
式都可以对通信进行管理
-
-
多进程编程
-
Linux中进行之间的通信方式(IPC)
-
基于通信的IPC方法
-
以数据传送为手段的IPC方法
包含:
管道(pipe) : 用来传送字节流
消息队列(message queue) : 用来传送结构化的消息对象 -
以共享内存为手段的ICP方法
共享内存区(share memeory) – 最快的IPC方法
-
-
基于信号的IPC方法
操作系统的信号(signal)机制 – 唯一的一种异步IPC方法 -
基于同步的IPC方法
最重要的是信号量(semaphore)
Go并发编程实战支持的IPC方法有管道、信号和socket
-
-
进程、线程、协程
-
进程
- 操作系统进行资源分配和调度的一个基本单位,有自己的独立内存空间
- 通信:通过进程间通信来通信
- 优点:相对比较稳定安全
- 缺点:创建、撤销和上下文进程间切换开销比较大
-
线程
- CPU调度和分派的基本单位
- 基本不拥有系统资源,与同线程其它进程共享线程所有资源
- 通信:线程间通信通过共享内存
- 优点: 资源开销比较少,上下文之间切换很快
- 缺点:相比进程不够稳定,容易丢失数据;
对于某些独占性资源存在锁机制,处理不当可能会产生死锁
-
协程
- 用户态的轻量级线程,协程的调度完全由用户控制
- 通信:建议channel通信
- 优点:上下文切换非常快
- 缺点:
-
-
Golang从入门到放弃200629--并发编程
最新推荐文章于 2024-08-31 00:30:00 发布