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

h5在哪个网站上做网站排名seo软件

h5在哪个网站上做,网站排名seo软件,wordpress禁止ip评论,网站400一. 并发介绍 进程和线程 进程是程序在操作系统中一次执行过程,系统进程资源分配和调度的一个独立单位。线程是进程执行的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程可以创建和撤销多个线程&#xff0c…

一. 并发介绍

        进程和线程

  • 进程是程序在操作系统中一次执行过程,系统进程资源分配和调度的一个独立单位。
  • 线程是进程执行的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
  • 一个进程可以创建和撤销多个线程,同一个进程中的多个线程之间可以并发执行。

        并发和并行

  • 多线程程序在一个核CPU上运行,就是并发。
  • 多线程程序在多个核CPU上运行,就是并行。

        协程和线程

  • 协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质有点类似于用户级线程,这些用户级线程的调度也是自己实现的。
  • 线程:一个线程上可以跑多个协程,协程是轻量级线程。

        goroutine只是由官方实现的超级“线程池”。

        每个实际4~5KB的栈内存占用和由于实现机制而大幅减少的创建和销毁开销是go高并发的根本原因。

        并发主要是由切换时间片来实现同时运行,并行则是直接利用多核实现多线程的运行,go可以设置使用核数,以发挥多核计算机的能力。

        goroutine奉行通过通信来共享内存,而不是共享内存来通信。

二. Goroutine

        2.1 介绍

        在java/c++中我们要实现一个并发编程,我们通常需要自己维护一个线程池,并且需要自己取包装一个有一个任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量心智。那么能不能有一种机制,程序员只需要定义很多任务,让系统去帮助我们把这些任务分配到CPU上实现并发执行呢?

        Go语言中的goroutine就是这样一种机制,goroutine的概念类似于线程,但goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能的将goroutine中的任务合理的分配给每一个CPU。Go语言之所以被称为现代化的编程语言,就是因为它在语言层面已经内置了调度核上下文切换的机制。

        在Go语言编程中,你不需要去自己写进程,线程,协程,你的技能包里只有一个技能-goroutine,当你需要让某个任务并发执行的时候,你只需要把这个任务包装成一个函数,开启一个goroutine去执行这个函数就可以了。

  • 使用goroutine

        Go语言中使用goroutine非常简单,只需要在调用函数的时候在前面加上go关键字,就可以为一个函数创建一个goroutine。

        一个goroutine必定对应一个函数,可以创建多个goroutine去执行相同函数。

        2.2 使用

  • 启动单个goroutine

        启动goroutine的方式非常简单,只需要在调用的函数(普通函数和匿名函数)前面加一个go关键字。

        使用协程:

  • 启动多个协程

        我们发现下面的打印不是按顺序打印的,这是因为协程是并发运行的,调度是随机的。

  • 注意:如果主协程退出了,其它子协程会不论在不在运行,会直接退出。

 2.3 goroutine与线程

  • 可增长的栈

        OS线程(操作系统的线程)一般由固定的栈内存(通常2MB),一个goroutine的栈在其生命周期开始只有很小的栈(典型情况下2KB),goroutine的栈不是固定的,它可以按需增大或缩小,goroutine的栈大小限制可以达到1GB,虽然极少会用到这么大。所以在Go语言中一次创建十万左右的goroutine也是可以的。

  • goroutine调度

        GPM是Go语言运行时(runtime)层面的实现,是go语言自己实现的一套调度系统。区别于操作系统调度OS线程。

  • G很好理解,就是个goroutine的,里面除了存放本goroutine信息外,还有与所在P的绑定等信息。
  • P管理着一组goroutine队列,P里面会存储当前goroutine运行的上下文环境(函数指针,堆栈信息及地址边界),P会对自己管理的goroutine队列做一些调度(比如把占用CPU时间较长的goroutine暂停,运行后续的goroutine等)当自己的队列消费完就去全局队列里面取,如果全局队列也消费完了会去其它P的队列里抢任务。
  • M(machine)是Go运行时(runtime)对操作系统内核线程的虚拟,M与内核线程一般是一一对应的关系,一个goroutine最终是要放到M上执行的。

        P与M一般也是一一对应。他们的关系:P管理着一组挂载在M上运行。当一个G长久阻塞在一个M上时,runtime会建立一个M,阻塞G所在的P会把其它的G挂载在新的M上,当旧的G阻塞完成或认为其已经死掉,回收旧的M。

        P的个数是通过runtime.GOMAXPROCS设定(最大256),Go1.5版本之后默认为物理线程数。在并发量大的时候会增加一些P和M,但不会太多,切换太频繁的话得不偿失。

        单从线程调度讲,Go语言相比起其它语言的优势在于OS线程是由OS内核调度的,goroutine则是由Go运行时(runtime)自己的调度器调度的,这个调度器使用一个称为m:n调度技术(复用/调度m个goroutine到n个OS线程)。其一大特点是goroutine的调度是在用户态下完成的,不涉及内核态与用户态之间的频繁切换,包括内存的分配与释放,都是在用户态维护着一个大的内存池,不直接调用系统的malloc函数(除非内存池需要改变),成本比调度OS线程低的多。另外一方面充分利用了多核的硬件资源,近似的把若干goroutine均分在物理线程上,再加上本身的goroutine的超轻量,以上种种保证了go调度方面的性能。

  • 总结

Go语言中的操作系统线程与goroutine之间的关系:

  • 一个操作系统线程对应用户态多个goroutine
  • go语言可以同时使用多个操作系统线程
  • goroutine和OS线程是多对多的关系,即m:n 

三.runtime包

  • runtime.Gosched()

        让出CPU时间片,重新等待安排任务。

package mainimport ("fmt""runtime"
)func main() {go func(s string) {for i := 0; i < 2; i++ {fmt.Println(s)}}("world")//主协程for i := 0; i < 2; i++ {runtime.Gosched() //切以下,再次分配任务fmt.Println("hello ")}
}
  • runtime.Goexit()

        退出当前协程。

  • runtime.GOMAXPROCS

        Go运行时的调度器使用GOMAXPROCS参数来确定需要使用多少个OS线程同时执行Go代码。默认值是机器上的CPU核心数。比如在一个8核心的机器上,调度器会把Go代码同时调度到8个OS线程上。(GOMAXPROCS是m:n调度中的n)

        Go语言可以通过runtime.GOMAXPROCS()函数设置当前程序并发时占用的CPU逻辑核心数。

        Go1.5版本之前,默认使用的是单核心执行。Go1.5版本之后,默认使用全部的CPU逻辑核心。

        我们可以通过将任务分配到不同的CPU逻辑核心上实现并行的效果,在这里举个例子:

        下面的例子是,只是用CPU的一个核心,先完成一个任务,再完成一个任务。

        设置逻辑核心为2,此时两个任务并行执行。

 

http://www.yidumall.com/news/75040.html

相关文章:

  • 青岛靠谱的做网站公司域名搜索
  • 怎样给公司做免费网站免费网站电视剧全免费
  • 做亚马逊网站的账务处理推广软文范文
  • ext做的网站有那些app推广接单网
  • 手机网站内容管理系统黄冈网站搭建推荐
  • 国家知识产权局专利查询系统官网网站seo是什么意思
  • easyui做门户网站什么优化
  • 可以做书的网站百度快照客服电话
  • 做外贸网站好的公司电工培训内容
  • 国外专门做视频翻译网站百度网址大全网站
  • 深圳做网站公司哪家比较好长沙网站制作
  • 容桂网站开发百度指数三个功能模块
  • 有哪些做共享充电宝的网站链交换反应
  • wordpress被劫持手机优化大师官方免费下载
  • 动态网站建设视频免费seo营销软件
  • 昆明网站制作公司百度推广全国新冠疫苗接种率
  • 有一个姑娘莱芜的莱芜的抖音优化排名
  • 加强公司内部网站建设鸿星尔克网络营销
  • 安卓apk软件下载官网百度sem优化师
  • 12306网站是谁做的刷关键词要刷大词吗
  • 学做网站的书个人怎么在百度上打广告
  • 济源建设工程管理处网站百度怎么优化网站排名
  • 建设厅网站文件朋友圈推广文案
  • 网站两侧对联广告图片营销策略从哪几个方面分析
  • 做住宿网站挣钱吗公司网络优化方案
  • javaweb网站开发小项目上海有哪些优化网站推广公司
  • 西安网站建设设计武汉网站优化
  • 高大上设计网站欣赏百度网站登录
  • 珍佰农 商城网站建设免费招收手游代理
  • 网站树状栏目有点seo主要做哪些工作