当前位置: 首页 > news >正文

大气医院网站源码制作网站注册登录模块的思维导图

大气医院网站源码,制作网站注册登录模块的思维导图,建设局主要负责什么,郑州seo技术顾问文章目录 Go学习-Day8单元测试Goroutine进程和线程并发和并行Go协程和主线程MPG模式CPU相关协程并行的资源竞争 Go学习-Day8 个人博客:CSDN博客 单元测试 testing框架会将xxx_test.go的文件引入,调用所有TestXxx的函数 在cal_test.go文件里面写这个 …

文章目录

  • Go学习-Day8
    • 单元测试
    • Goroutine
      • 进程和线程
      • 并发和并行
      • Go协程和主线程
      • MPG模式
      • CPU相关
      • 协程并行的资源竞争

Go学习-Day8

  • 个人博客:CSDN博客

单元测试

  • testing框架会将xxx_test.go的文件引入,调用所有TestXxx的函数

  • 在cal_test.go文件里面写这个

  • package mainimport "testing"func TestAdd(t *testing.T) {a, b := 1, 2if add(a, b) != 4 {t.Fatalf("Wrong Answer!")}
    }
    
  • 在cal.go文件里写这个

  • package mainfunc add(a int, b int) int {return a + b
    }
  • 运行go test -v的命令,就能运行单测

  • 可以得到结果

  • === RUN   TestAddcal_test.go:8: Wrong Answer!
    --- FAIL: TestAdd (0.00s)
  • testing框架import这个test文件之后,会调用所有TestXxx的函数,注意大写!

Goroutine

进程和线程

  • 进程是程序的在操作系统的一次执行过程
  • 线程是比进程更小的单位,一个进程能创建销毁多个线程
  • 一个程序至少有一个进程,一个进程至少有一个线程

并发和并行

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

Go协程和主线程

  • 主线程类似进程

  • 协程类似线程,是轻量级的线程

  • 协程的特点

    • 有独立的空间
    • 共享程序的堆空间
    • 调度由用户控制
    • 协程是轻量级的线程
  • import ("fmt""strconv""time"
    )func test() {for i := 0; i < 5; i++ {fmt.Println("test() calls! " + strconv.Itoa(i))time.Sleep(time.Second)}
    }func main() {go test()for i := 0; i < 5; i++ {fmt.Println("main() calls! " + strconv.Itoa(i))time.Sleep(time.Second)}
    }
  • 输出

  • main() calls! 0
    test() calls! 0
    test() calls! 1
    main() calls! 1
    main() calls! 2
    test() calls! 2
    test() calls! 3
    main() calls! 3
    main() calls! 4
    test() calls! 4
  • go关键字会另起一个协程,主线程执行到这里会开一个协程并行执行,如果主线程执行完毕退出,协程会被强制退出

MPG模式

  • M(Machine)是操作系统的主线程,也就是物理线程

  • P(Processor)协程执行的上下文

  • G(Gorountine)协程

  • Go语言的协程是轻量级的,是逻辑态的,可以起上万个协程;而C/java的多线程是内核态的,几千个就会耗光CPU

CPU相关

runtime.NumCPU()
//获取本地CPU数目
runtime.GOMAXPROCS(int)
//设置GO最大可用的CPU数目
//Go Max Processors

协程并行的资源竞争

  • 多个协程同时访问一个资源会发生冲突,会发生并发问题

  • 在java中我们有锁和原子类来保证并发安全

  • 声明一个全局锁变量lock

  • lock sync.Mutex
    //sync是同步的意思,Muti-excluded互斥锁?
    
  • lock.Lock()//在进行并发的读写操作的时候,先上个锁
    ...//在进行操作的时候,别的协程会排队等待
    lock.Unlock()//解锁之后,才能给别的协程使用
    
  • 主线程读的时候也需要加锁,因为底层不知道协程已经解锁了,会发生资源冲突

  • 但是这样不同协程之间没办法通讯,不知道什么时候协成完成任务了,白白空转浪费时间,或者提前结束主线程,终止协程,管道可能能解决这些问题,明天再学

http://www.yayakq.cn/news/549614/

相关文章:

  • 网站外包建设如何修改英文WordPress主题首页
  • 音乐网站建设报告广州越秀区风险等级
  • 十堰门户网站建设百度会收录双域名的网站么
  • 设计类网站策划书宇说建筑网站
  • 企业网站备案要钱嘛企业网站如何设置关键词
  • 济南网络科技有限公司有哪些seo优化网络推广
  • 高端网站建设与制作seo搜索引擎是什么意思
  • 做外贸主页网站用什么的空间好点深圳工业设计大展2021
  • 佛山三水网站建设手机网站转微信小程序
  • 找深圳做网站的公司中山百度seo排名优化
  • 天津手机网站建设南宁seo网站建设费用
  • wordpress跳转到外部链接引擎优化搜索
  • 网站建设的几种结构成都网站建设cdsqywl
  • 织梦做的网站很老wordpress是响应式吗
  • 建设电影网站视频项目计划书目录模板
  • 厦门 公司网站建设网页界面设计的主要内容
  • 个人网站用备案吗掌门一对一辅导官网
  • 做软件好还是做网站好《网站建设》期末考试
  • 怎么安装php网站网站访客qq获取原理
  • 徐州营销网站建设wordpress导航条
  • 响应式网站 手机版网络营销管理办法
  • 什么网站做美式软装设计理念饲料公司网站建设方案
  • 合肥网站建设制作公司seo推广计划
  • 做免费的小说网站可以赚钱吗网络广告投放流程的第一步要做
  • 网站建设如何选择网站建站的标准
  • 网站建设流程步骤怎么样学校网站模板免费下载
  • 手机网站免费模板中国建设工程项目网
  • 家装网上怎么接单啊网站建设网站优化
  • 建外贸网站推广特色的重庆网站推广
  • 电子商务网站建设可行性分析网站设计所遵循的原则