goroutine 的基本介绍 | 学习笔记

简介: 快速学习 goroutine 的基本介绍

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程goroutine 的基本介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/626/detail/9746


goroutine 的基本介绍

 

内容介绍

一,进程和线程说明

二,并发和并行

 

一,进程和线程说明

1. 进程就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。

例如,前面写了很多的程序,像刚才点 exe 文件,比如前面讲的叫客户关系管理系统,弄完之后,其实是一个 exe 的一个文件,这个并不能做程序,这个可以叫做一个文件。那么源代码也要文件。指的可以把这个教程做一个源码,程序指的是程序的进程是什么进程,运行这个东西,让它在内存里面操作系统。进行资源分配和调度的基本单位,最直接的可以看到在任务管理器里面都打开看看都可以叫做一个一个的进程。这个都有些进程是后台进程,这些进程前台就是他的界面,比如 word 文档,打开这个 word 文档,其实他一双击就会是一个一日期是来执行的,包括用的最多的,可能用的迅雷,比如迅雷就可以看到这里会抓住一个进程。这个意思很简单,就是一个程序执行的进程。它会系统分配资源。

单元测试综合案例要求:
编写一个 Monster 结构体,字段 Name,, Age, Skill
给 Monster 绑定方法 Store,可以将一个 Monster 变量(对象),序列化后保存到文件中
给 Monster 绑定 ReStore,可以将一个序列化的 Monster,从文件中读取,并反序列化为 Monster 对象,检查反序列化,名字正确
编程测试用例文件 store_ test. go,编写测试用例函数 TestStore  和 TestRestore 进行测试。
2. 线程是进程的一个执行实例,是程序执行的最小单元,是比进程更小的能独立运行的基本单位。

一个进程下,可以有许多个线程。
可以最大发挥 CPU 的一个性能,相对来说线程的资源少一些。
3. 一个进程可以创建和销毁多个线程,同一个进程中的多个线程可以并发执行。

线程是独立的,它相当于一个进程下面可以有很多很多的线城,其实这样才能最大的发挥我 cpu 的一个性能。他是那种实体店,同时线城相对来说资源较少一些。所以是这样一个关系,所以可以这么去理解。接着往下看一个进程,可以创建和销毁多个线程,同一个进程中的多个线程可以并发执行。并发执行就是从效果上来说,有五个文件同时下载。从效果上说,五个同时下载,但实际上从一个微观的角度来看,其实只是那个时间很短,来回切换。其实一个微观来看,一个时间点只有一个文件下载。还有一个程序,至少有一个进程,一个进程必须有一个现成的关系。并发是从效果上说,下载文件时,五个同时下载,但从微观上来说,一个时间点只有一个文件来下载。
4. 一个程序至少有一个进程,一 个进程至少有一个线程。

image.png

image.png


二,并发和并行

(1)并发

①并发:因为是在-一个 cpu 上,比如有10个线程,每个线程执行10毫秒(进行轮询搡作),从人的角度看,好像这10个线程都在运行,但是从微观上看,在某-一个时间点看,其实只有一个线程在执行,这就是并发。

多线程程序在单核上运行,就是并发。

在一个网页上,一个时间点只播放了一个内容。

并发是指多线程程序在单核上运行,目标必达。所以 cpu 它只有一科,或者说程序运行作用在一颗 cpu,叫做并发。简单来讲就是这个 cpu,它的切换的时间单位是0.0几秒或者几毫秒来切换的,对个人的反应来说实际上他是在一个时间点上,其实他是在执行一个任务。比如打开一个网页,假设单核的网页,打开了两个视频,感觉两个视频在同时播放,其实他在一个时间点上,就是一个单核,如果是多和另外一个说单核把它叫并发。这个概念就变好。

现在有几个任务但电脑上只有一个 cpu,当然也有可能有多个 cpu,假设有 cpu1。这个 cpu 上面,跑了三四个任务,任务简单。任务一,任务二,任务三。假设有三个任务,是直接作用在这一个 cpu 的。同时跑在这一个 cpu 的,如果是这种情况,显然在同一个时间点上来说,其实 CPU 不可能在一个微观世界上,执行异议,执行这是不可能的。

②并发的特点
多个任务作用在-一个 cup。
从微观的角度看,在一个时间点上,其实只有一个任务在执行。

(2)并行

①并行:因为是在多个 cpu 上(比如有10个 cpu),比如有10个线程,每个线程执行10毫秒(各自在不同 cpu 上执行),从人的角度看,这10个线程都在运行,但是从微观上看,在某一个时间点看,也同时有10个线程在执行,这就是并行。

多线程程序在多核上运行就是并行。并行意思就是说他能够把这三个任务分配到三个 cpu 去做,因为现在传统的编程员,有多任务,也是分配一个 cpu,那么 go 语言,它能够把这个所谓的并发转成并行。可以做一个改进,还是这样一个任务,但是情况发生了变化,把这个选一下,把它粘贴拷贝到下一地方,这样改进,效率太低。一个 cpu,另外还有几个,这样第一个 cpu 就做这一件事情。在两个 cpu,使用 cpu2,直接让这个 cpu 去做。假如还有个 cpu3,一般来讲就是这样的,很少是三个五个内容比较少,那示意让这个 CPU,就专门干一种事情,把它叫做并行,并行的特点,一看就能看出来。并行的特点是多个任务作用在多个 cpu 上,cpu 上说的都是要从微观角度在同一个时间段有多个,其实有多个任务同时执行。注意是同时,不是说它真的是在切换,就是真的在同时执行。这样比较,说并行的效果就他自己的速度,肯定是要比并发要快,这样看来,并行的速度一定更快。

②并行的特点
多个任务作用在多个 cpu。
从微观的角度看,在一一个时间点口上,就是多个任务在同时执行,
并行的速度快。

image.png

相关文章
|
5月前
|
Go 调度 开发者
[go 面试] 深入理解进程、线程和协程的概念及区别
[go 面试] 深入理解进程、线程和协程的概念及区别
|
3月前
|
安全 Go 调度
探索Go语言的并发之美:goroutine与channel
在这个快节奏的技术时代,Go语言以其简洁的语法和强大的并发能力脱颖而出。本文将带你深入Go语言的并发机制,探索goroutine的轻量级特性和channel的同步通信能力,让你在高并发场景下也能游刃有余。
|
8月前
|
安全 Go 开发者
Golang深入浅出之-Go语言并发编程面试:Goroutine简介与创建
【4月更文挑战第22天】Go语言的Goroutine是其并发模型的核心,是一种轻量级线程,能低成本创建和销毁,支持并发和并行执行。创建Goroutine使用`go`关键字,如`go sayHello("Alice")`。常见问题包括忘记使用`go`关键字、不正确处理通道同步和关闭、以及Goroutine泄漏。解决方法包括确保使用`go`启动函数、在发送完数据后关闭通道、设置Goroutine退出条件。理解并掌握这些能帮助开发者编写高效、安全的并发程序。
102 1
|
8月前
|
消息中间件 安全 调度
Python从入门到精通:3.1.1多线程与多进程——进程和线程的概念
Python从入门到精通:3.1.1多线程与多进程——进程和线程的概念
|
8月前
|
Go 调度 Python
Goroutine和coroutine区别,这一篇就够了
Goroutine和coroutine区别,这一篇就够了
168 0
|
存储 安全 Linux
Go语言学习笔记-进程和线程
Go语言学习笔记-进程和线程
66 0
Go语言学习笔记-进程和线程
Go Web编程实战(7)----并发goroutine
Go Web编程实战(7)----并发goroutine
208 1
Go Web编程实战(7)----并发goroutine
|
缓存 安全 Java
线程基础知识总结
@[toc] 1. 认识线程(Thread) 1.1 概念 1.2 创建线程 1.2.1 方法1 继承Thread类 1.2.2 方法2 实现Runnable接口 1.2.3 实现 Callable 接口,使用 FutureTask 接收线程返回值 1.2.4 对比上面两种方法 2. Thread类及常见方法 2.1 Thread的常见构造方法 2.2 Thread的几个常见属性 2.3 启动一个线程-start() 2.4 中断一个线程 2.5 等待一个线程-join() 2.6 获取当前线程的引用 2.7 休眠当前线程 3. 线程的状态 3.1 线程的所有状态 3.2 线程各状态之间的转移
66 0
|
算法 调度 Scala
Queue 基本介绍 | 学习笔记
快速学习 Queue 基本介绍
Queue 基本介绍 | 学习笔记
|
Java Go 开发者
一文搞懂Go语言并发【goroutine】
一文搞懂Go语言并发【goroutine】
一文搞懂Go语言并发【goroutine】