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

成都网站优化及推广上海做网站的网站

成都网站优化及推广,上海做网站的网站,外贸营销型网站建设多少钱,建网站多少钱?Golang中的goroutine进程和线程说明并发和并行并发并行Go协程和Go主线程案例小结goroutine的调度机制MPG模式基本介绍MPG模式运行的状态1MPG模式运行的状态2设置GOlang运行的CPU数不同 goroutine之间如何通讯使用全局变量加锁同步改进程序进程和线程说明 1.进程就是程序在操作… Golang中的goroutine进程和线程说明并发和并行并发并行Go协程和Go主线程案例小结goroutine的调度机制MPG模式基本介绍MPG模式运行的状态1MPG模式运行的状态2设置GOlang运行的CPU数不同 goroutine之间如何通讯使用全局变量加锁同步改进程序进程和线程说明 1.进程就是程序在操作系统中的一次执行过程是系统进行资源分配和调度的基本单位2.线程是进程的一个执行实例是程序执行的最小单元它是比进程更小的能独立运行的基本单位3.一个进程可以创建和销毁多个线程同一个进程中的多个线程可以并发执行4.一个程序知道有一个进程一个进程至少有一个线程 并发和并行 1、多线程程序在单核上运行就是并发 2、多线程程序在多核上运行就是并行 并发 因为是在CPU上比如都有10个线程每个线程执行10毫秒(进行轮询操作)从人的角度看好像这10个线程都在运行但是从微观上看在某一个时间点看其实只有一个线程在执行这就是并发 并行 因为是在多个CPU上(比如有10个CPU)比如有10个线程每个线程执行10毫秒(各自在不同的CPU上执行)从人的角度看这10个线程都在运行并且从微观上看在某一个时间点看也同时有10个线程在执行这就是并行 Go协程和Go主线程 1.Go主线程(有程序员直接称为线程/也可以理解成进程)一个Go线程上可以起多个协程可以理解为协程是轻量级的线程 2.Go协程的特点 有独立的栈空间共享程序堆空间调度由用户控制协程是轻量级的线程 案例 编写一个程序 1、在主线程中(也可以理解成进程)中开启一个goroutine改协程每隔1秒输出“helloworld” 2、在主线程中也每隔1秒“hellogolang”输出10次后退出程序 3、要求主线程和goroutine同时执行 4、画出主线程和协程执行流程图 package mainimport (fmtstrconvtime )func test() {for i : 1; i 10; i {fmt.Println(test () hello,world strconv.Itoa(i))time.Sleep(time.Second)} }func main() {go test() //开启了一个协程for i : 0; i 10; i {fmt.Println(main() hello,golang strconv.Itoa(i))time.Sleep(time.Second)} } /* main() hello,golang0 test () hello,world1 test () hello,world2 main() hello,golang1 main() hello,golang2 test () hello,world3 test () hello,world4 main() hello,golang3 main() hello,golang4 test () hello,world5 test () hello,world6 main() hello,golang5 main() hello,golang6 test () hello,world7 test () hello,world8 main() hello,golang7 main() hello,golang8 test () hello,world9 main() hello,golang9 test () hello,world10 main() hello,golang10*/小结 1、主线程是一个物理线程直接作用在CPU上的。是重量级的非常消耗CPU资源2、协程从主线程开启的是轻量级的线程是逻辑态。对资源消耗相对小3、Golang的协程机制时重要的特点可以轻松的开启上万个协程。其他编程语言的并发机制时一般基于线程的开启过多的线程资源耗费大这里就突显Golang在并发上的优势了 goroutine的调度机制 MPG模式基本介绍 MPG模式运行的状态1 1、当前程序有三个M如果三个M都在一个CPU运行就是并发如果在不同的CPU运行就会并行2、M1,M2,M3正在执行一个GM1的协程队列有三个M2的协程队列有三个M3的协程队列有两个3、从下图可以看到Go的协程是轻量级的线程是逻辑态的Go可以容易的起上万个协程4、其他程序c/java的多线程往往是内核态的比较重量级几千个线程可能耗光CPU MPG模式运行的状态2 1、分两部分来看2、原来的情况是M0主线程正在执行Go协程另外有三个协程在队列等待3、如果Go协程阻塞比如读取文件或者数据库等4、这时就会创建M1主线程(也可能是从已有的线程池中取出M1)并且将等待的3个协程挂到M1下开始执行M0的主线程下的Go任然执行文件io的读写5、这样的MPG调度模式可以既让GO执行同时不会让队列的其他协程一直阻塞任然可以并发/并行执行6、等到GO不阻塞了M0会被放到空闲的主线程继续执行(从已有的线程池中取)同时GO又会被唤醒 设置GOlang运行的CPU数 介绍为了充分利用多CPU的优势在golang中设置运行的CPU数目 1.go1.8后默认让程序运行在多个核上可以不用设置了 2.go1.8前要设置以下可以更高效的利用CPU package mainimport (fmtruntime )func main() {//获取当前系统CPU数量num : runtime.NumCPU()//这里设置num-1的CPU运行go程序runtime.GOMAXPROCS(num)fmt.Println(num, num) } //num8不同 goroutine之间如何通讯 1、全局变量加锁同步 2、channel 使用全局变量加锁同步改进程序 因为没有对全局变量m加锁因此会出现资源争夺问题代码会出现错误提升concurrent map writes解决方案加入互斥锁数的阶乘很大结果会越界可以将求阶乘改成sum uint64(i)
http://www.w-s-a.com/news/97421/

相关文章:

  • 公司做网站还是做阿里好呢国外的旅游网站做的如何
  • 怎么做wep网站长沙seo排名公司
  • 海南网站网络推广做转运网站
  • 门户网站方案用户等待网站速度
  • 哈尔滨专业建网站方案深圳生活免费信息网
  • 检测网站是否被挂黑链wordpress 网址分享
  • 网站建设贵阳东莞网站建设策划
  • 网站5建设需要学什么桃城网站建设公司
  • 杭州外贸网站企业门户网站的安全性
  • 建设论坛网站需要做什么水果电商网站建设相关文献
  • 群晖 nas 做网站建设网站的报价
  • 白山做网站网站建设 app 优化
  • 畜牧业网站建设官方网站下载拼多多app
  • 网站规划和布局备案网站地址
  • 站长工具流量统计招工信息发布平台
  • 上海网站建设公司排行建设无障碍网站
  • phpcms网站打不开网页制作网站设计稿
  • 博客网站开发环境wordpress 中英文双语
  • 做网站报价表群辉装wordpress
  • 请人做游戏的网站视觉设计师的工作内容
  • 昆明网站建设知名企业博客网站开发
  • 如何做网站网页免费thinkphp网站后台模板
  • 怎么自己做优惠券网站济南小程序开发
  • 南昌网站专业制作做仿站如何获取网站源码
  • qq钓鱼网站wordpress 企业站模板
  • 推进文明网站建设免费设计公司logo设计
  • 做电脑租赁网站server 2008 网站部署
  • 做网站的公司一年能赚多少钱wordpress作者增加分类插件
  • 苏州尚云网站建设专业摄影网站推荐
  • 020网站开发微信公众号直接链接网站怎么做