0%

【Go】并发编程的小结


对于一个 Java 都还没学明白的人就来看这个 Go , 说实话,难度不是很大、 Go 语言和 C 语言还是比较接近的,但是比 C 语言简单。在 Go 的并发编程里面,会有一个概念叫 协程 。浅谈我对协程的理解 这个对协程的理解写的挺好的,但是这里面的有条评论写的也挺真实的: “说了协程的特点 但是还是没说清楚协程是什么。 就像给别人说一个女孩子如何漂亮温柔,可是说这么多有什么用。我想知道的是这个女孩的脸型,腿有多长,胸是怎么长的。给张照片也好啊.” 就扶他。

并发基础

一般的,在将并发的时候,总会先了解下 (多)进程 , (多)线程 。

多进程

进程是程序在计算机上的一次执行活动。当我们运行一个程序的时候,我们就相当于启动了一个进程。凡是用于完成操作系统的各种功能的进程就是系统进程,而所有有你启动的进程就是用户进程。多进程就是计算机同时执行多个进程。

多线程

说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程。

进程可以简单的理解为一个可以独立运行的程序单位,它是线程的集合,进程就是有一个或多个线程构成的。而线程是进程中的实际运行单位,是操作系统进行运算调度的最小单位。可理解为线程是进程中的一个最小运行单元。

多线程就是指一个进程中同时有多个线程正在执行。

为什么使用多线程

  • 在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作等,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作。

  • 可以提高程序的效率。

  • 在一些等待的任务上,如用户输入,文件读取等,多线程就非常有用了。

多线程的缺点

  • 使用太多线程,是很耗系统资源,因为线程需要开辟内存。更多线程需要更多内存。

  • 影响系统性能,因为操作系统需要在线程之间来回切换。

  • 需要考虑线程操作对程序的影响,如线程挂起,中止等操作对程序的影响。

  • 线程使用不当会发生很多问题。

并行、并发和高并发

  • 并行:多个CPU实例或多台机器同时执行一段处理逻辑,是真正的同时。

  • 并发:通过CPU调度算法,让用户看上去同时执行,实际上CPU操作层面不是真正的同时。

  • 线程安全:多个线程操作公用资源,有可能产生安全问题。

  • 高并发:高并发指的是是一种系统运行过程中遇到的一种“短时间内遇到大量操作请求”的情况,主要发生在web系统集中大量访问或者socket端口集中性收到大量请求。

协程

  • 协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。

  • 一个进程内部可以运行多个线程,而每个线程又可以运行很多协程。线程要负责对协程进行调度,保证每个协程都有机会得到执行。当一个协程睡眠时,它要将线程的运行权让给其它的协程来运行,而不能持续霸占这个线程。同一个线程内部最多只会有一个协程正在运行。

  • 协程可以简化为三个状态:运行态、就绪态和休眠态。同一个线程中最多只会存在一个处于运行态的协程。就绪态协程是指那些具备了运行能力但是还没有得到运行机会的协程,它们随时会被调度到运行态;休眠态的协程还不具备运行能力,它们是在等待某些条件的发生,比如 IO 操作的完成、睡眠时间的结束等。

  • 子协程的异常退出会将异常传播到主协程,直接会导致主协程也跟着挂掉。

这是打赏的地方...

本文标题:【Go】并发编程的小结

文章作者:Mr.Sun

发布时间:2020年06月10日 - 14:29:08

最后更新:2020年06月17日 - 17:25:44

原始链接:http://www.blog.sun-iot.xyz/posts/8c2c2a01

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

---------Thanks for your attention---------