GO语言入门——工程实践 | 青训营笔记

47 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

本文记录的是录播视频中遇到的不会的知识点,并不会一贯地按着ppt来罗列一些知识点,仅仅代表我个人的一些观点与看法,欢迎各位大佬指点问题。

image.png

1.语言进阶——并发编程

1.1 并发,并行

image.png 个人理解:

  • 并发:在微观上,并不是多个程序在同一时空下运行,而是通过CPU分配时间片来交替运行,在宏观上,CPU进程调度速度是很快地,给人的效果好像是同时运行的
  • 并行:多进程同时运行

1.2 进程,线程,协程

  • 进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位 。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。

  • 线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

  • 协程

协程是一种用户态的轻量级线程, 协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快

关于这三者进一步的了解可以点这

1.3 Goroutine CSPCSP Chanel $$ Lock

  • Goroutine 协程,在Golang里可以通过关键字Go来很容易地创建一协程

image.png

  • CSP

image.png 关于 通过共享内存而实现通信 这一方式,容易因为产生读写不同步,从而导致读到脏数据,所以在高并发中用的比较少,可以点击该文字进一步了解

  • Channel(通道)

image.png

image.png

先写这么多吧 剩下的明天再补补