从零开始Go语言Ⅲ-基础P1 | 青训营笔记

81 阅读3分钟

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

前言
针对入门部分内容进行更深入的了解和实践。

Go语言基础

并发编程

对于用户感知来说,在早些受到硬件设备性能限制,所采用的多任务操作系统实现可能会出现显著的切换延迟,但是目前的主流计算机和配备多处理器的高端服务器,可以真正并行处理多任务,实现“真并发” (genuine concurrency)。目前所认知的并发是基于任务切换,随着硬件性能的提升和分发算法优化,任务切换速度提升,我们很难去分辨处理器在某一刻暂停和切换任务,这对于用户和软件都会认为任务是并发的。 当然,一芯多核或是装配多个处理器,都可以真正实现任务的并行运作,这种被称为硬件并发(hardware concurrency)。

基本概念

并发指的是同一个系统中,多个独立活动同时进行。

  • 多进程并发:将软件拆分成多个独立进程同时运行,它们都只含单一线程,进程间通过信号、套接字、文件、管道等进行通信。
  • 多线程并发:在单一进程中运行多线程,同一进程内的所有线程都共用相同的地址空间,且所有线程都能直接访问大部分数据。

并发与并行

对于代码层面,并发与并行(parallel)的含义很大程度上相互重叠。他们的差别并不大,但着重点和使用场景是区分他们的主要标志。并发注重分离关注点或响应能力,并行注重利用可调配的硬件资源提升大规模数据处理的性能。

协程

在了解协程之前,首先对线程进行一定了解,线程是在进程之后发展出来的概念,也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。一个进程可以包含多个线程,线程的优点是减小了程序并发执行时的开销,提高了操作系统的并发性能,缺点是线程没有自己的系统资源,只拥有在运行时必不可少的资源,但同一进程的各线程可以共享进程所拥有的系统资源,如果把进程比作一个车间,那么线程就好比是车间里面的工人。不过对于某些独占性资源存在锁机制,处理不当可能会产生“死锁”。
协程协程是一种用户态的轻量级线程,又称微线程,英文名Coroutine,协程的调度完全由用户控制。与传统的系统级线程和进程相比,协程的最大优势在于其"轻量级",可以轻松创建上百万个而不会导致系统资源衰竭,而线程和进程通常最多也不能超过1万的。这也是协程也叫轻量级线程的原因。

协程具体操作待学习实践后更新

参考

  • 字节课程-Go语言原理与实践
  • 菜鸟教程-Go语言
  • Wiki-Go社区