zoukankan      html  css  js  c++  java
  • go笔记08

    并行和并发

    一、并行

    并行的关键是有同时处理多个任务的能力,但只能先做一个,在做另一个并行是加硬件可以解决

    同一时间只能做一件事,多件事可以分多个时间去做

    指在同一时刻,有多条指令在多个处理器上同时执行

    二、并发

    并发的关键是有处理多个任务的能力,不一定要同时。

    并发时代码性能优化可以解决  

    同一时间可以快速切换多件事

    比如: 吃饭 看电视 玩游戏

    指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行

    进程 线程 协程

    goroutine 

    一、进程

    1.定义

    进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。

    一个独立的应用,程序运行起来,产生一个进程

    进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位。

    2. 特点:

    动态性:进程是程序的一次执行过程,是临时的,有生命周期的,是动态产生的,动态消亡的;

    并发性:任何进程都可以同其他进行一起并发执行;

    独立性:进程是系统进行资源分配和调度的一个独立单位;

    结构性;进程由程序,数据和进程控制块三部分组成

    二、线程

    定义及特点

    线程是调用CPU运算的最小单元

    线程的调度由操作系统进行调度

    三、协程

    定义及特点

    轻量级线程

    协程的调度由用户控制

    一个进程可以有多个线程,一个线程上可以跑多个协程

    四、go中的并发放

    使用goroutine 是协程

    go 中使用并发

    goroutine必定对应一个函数。

    多个goroutine可以执行相同的函数

    Go程序就会main()函数创建一个默认的goroutine

    一、goroutine的使用

    先执行主协程,其他的协程创建需要时间,所以会先执行main,在执行Hello 

    那个空闲执行那个,主携程终止,其他携程也会终止

    3. 有缓存和无缓存的区别

    无缓存的chan ,chan为空,读取将阻塞,chan不为空,写入将阻塞

    有缓存的chan,当缓存满了写入将阻塞,当chan为空读取将阻塞

    已关闭的chan中不能写入数据

    从关闭的channel读取消息不会产生panic,且只能读取还被读取的消息

    关闭channel会产生一个广播机制,所有向channel读取消息的goroutine都会收到消息

    四、 Goroutine池

    作用 

    大量的goroutine会占用大量的内存,Goroutine池可以减轻内存负担

    性能消耗;重复的创建与销毁goroutine,大量的goroutine调度等会占用资源,goroutine池

    可以减轻资源消耗

    减少goroutine创建时间,提高效率

    管理协程,控制并发量 定期回收等

  • 相关阅读:
    DML-DDL-DCL
    FastDFS常见场景模拟
    如何定义软件版本
    鸟哥的linux私房菜学习-(七)改变文件属性与权限
    鸟哥的linux私房菜学习-(六)Linux 文件权限介绍
    二、基本语法
    一、JavaSE语言概述
    鸟哥的linux私房菜学习-(五)补充:重点回顾
    鸟哥的linux私房菜学习-(五)Linux系统的在线求助man page与info page
    鸟哥的linux私房菜学习-(四)linux命令的基本概念
  • 原文地址:https://www.cnblogs.com/simadongyang/p/14397356.html
Copyright © 2011-2022 走看看