menu

GOLANG设计模式基础和分类

date_range 14/05/2020 02:43

OOP基础包括如下:

  • 类与对象
  • 三大基本特性
  • 五大基本原则

区分“并发”与“并行”的概念

date_range 11/11/2019 02:00

并发与并行这两个概念是令人困惑的,但在go语言的编程中是必须要理解的。

	并发(concurrent)
并发是指两种或两种以上的行为在系统中同时存在,至于这两个行为是否在某一时刻同时“执行”,在并发的概念中并不考虑。
在go语言中,go语句可以开启一个新的goroutine,这就典型的并发。不同的goroutines在程序运行期间可能同时存在着, 至于这些goroutines在某一个时刻是不是同时运行, 我们不去关心。 事实上, 在单核CPU系统中, goroutines的运转是依赖cpu的时间片轮转算法的,即交替执行。但这的的确确是并发,原因是系统具备了同时处理多种行为的能力。实际上这是一种人类无法直接感知的“伪并行”,只不过从表面上看来,“像是同时执行的”。
	并行(parellel)
并行意味着多个动作在某一时段是同时执行的。在多核CPU的前提下, go可以为goroutines指定运算需要的处理器数量, 这样的话, goroutines就是真正的并行了,每个goroutine有独立的CPU为自己运算,而不需要公用一个CPU来轮转运算。
对比
可以说并发是一个逻辑上的概念,并行是一个物理运行状态的概念。并行是并发的一个“子集”,并发包含并行。
转载自segmentfault

乐观锁+版本号解决锁竞争问题

date_range 23/10/2019 03:23

在高并发的场景下,经常会遇到这种情况: A请求过来,查询出来一条数据,进行update操作,与此同时B请求也在这个时候过来,对这条数据进行查询,并进行操作。此时就会出现B在A之后进行查询操作,但是实际B的数据却被A覆盖。