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

怎么自己做直播网站wordpress my02visitors

怎么自己做直播网站,wordpress my02visitors,线下营销活动有哪些,上海建设网站的公司一. MPG模式 Go语言的调度模型被称为GMP#xff0c;这是一个高效且复杂的调度系统#xff0c;用于在可用的物理线程上调度goroutines#xff08;Go的轻量级线程#xff09;。GMP模型由三个主要组件构成#xff1a;Goroutine、M#xff08;机器#xff09;和P#xff0…一. MPG模式 Go语言的调度模型被称为GMP这是一个高效且复杂的调度系统用于在可用的物理线程上调度goroutinesGo的轻量级线程。GMP模型由三个主要组件构成Goroutine、M机器和P处理器。下面详细介绍这三个组件以及它们如何协同工作。 1. GoroutineG Goroutine 是Go语言中的一个基本概念类似于线程但比线程更轻量。Goroutines在Go的运行时环境中被调度和管理而非操作系统。Goroutines非常轻量启动快且切换开销小。这是因为它们有自己的栈这个栈可以根据需要动态增长和缩减。 2. MachineM M 代表了真正的操作系统线程。每个M都由操作系统调度并且拥有一个固定大小的内存栈用于执行C代码。M负责执行Goroutines的代码。Go的运行时会尽量复用M以减少线程的创建和销毁带来的开销。 3. ProcessorP P 是Go运行时的一个资源可以看作是执行Goroutines所需的上下文环境。P的数量决定了系统同时运行Goroutines的最大数量。每个P都有一个本地的运行队列用于存放待运行的Goroutines。P的数量一般设置为等于机器的逻辑处理器数量以充分利用多核的优势。 MPG 工作方式 在程序启动时Go运行时会根据可用的核心数创建一定数量的P。每个P都会与一个M绑定在一起这个M会从P的本地运行队列中取出一个G来执行。当Goroutine阻塞时比如等待I/O执行它的M会被解绑并且该Goroutine会被移动到全局队列或者等待队列中让其他M可以接管这个P并继续执行其他Goroutines。如果所有的M都阻塞了运行时会创建额外的M来保证至少有一个M是非阻塞的以继续执行Goroutines。 调度优势 Go调度器的设计使得成千上万的Goroutines能够在数量较少的线程M上高效运行这极大地减少了上下文切换的开销。Go的调度器是协作式的这意味着Goroutines需要自己释放控制权。通常这发生在显式的阻塞操作如I/O操作或者隐式的调度点如函数调用时。 二.互斥锁实现阶乘计算 1.代码 package mainimport (fmtsync )// 多协程计算阶乘var (myMap make(map[int]int) // 全局变量mu sync.Mutex // 安全访问myMapwg sync.WaitGroup // 等待所有协程完成 )func main() {// 开启协程for i : 1; i 10; i {wg.Add(1)go factorial(i)}// 等待所有协程完成后再打印wg.Wait()// 遍历myMap并打印结果for i, v : range myMap {fmt.Println(i, v)} }// 计算阶乘 func factorial(n int) {res : 1// 计算阶乘for i : 1; i n; i {res * i}// 递延地减少WaitGroup计数器defer wg.Done()// 在修改myMap之前进行互斥锁操作mu.Lock()myMap[n] resmu.Unlock() }2.MPG模型解释 Go语言的并发模型被称为MPG模型其中 M 代表机器Machine是对操作系统线程的抽象。P 代表处理器Processor是对M进行调度的上下文。G 代表Goroutine是Go的轻量级线程它在M上执行。 当一个Go程序运行时 GoroutinesG 在**ProcessorsP**上被调度。每个P都绑定到一个M操作系统线程但一个P可以调度多个G。在这段代码中当main函数启动多个goroutines时这些G被分配到不同的P上并且可能在不同的M上执行。当一个G在执行阶乘计算时如果它需要等待例如等待互斥锁它会被P挂起并且P会转而执行另一个G。一旦所有的G都执行完毕即wg.Wait()返回程序进入最后阶段遍历并打印myMap中存储的结果。 3.管道channel基本概念 创建管道 使用make关键字创建管道。可以创建有缓冲的管道或无缓冲的管道。示例ch : make(chan int) 创建一个传递整型数据的无缓冲管道。无缓冲管道这种管道没有存储空间因此发送操作ch - v会阻塞直到另一端有goroutine准备好接收-ch。无缓冲管道确保同时只有一个数据在通道中传递它强制发送者和接收者同步交换数据。有缓冲管道这种管道有一个指定的容量允许在接收者准备好接收之前存储有限数量的值。如果管道满了即达到其容量限制发送操作将阻塞如果管道为空接收操作将阻塞。有缓冲管道提供了一定程度的松耦合允许发送者和接收者在缓冲区不满和不空的情况下独立操作。 发送和接收数据 使用箭头操作符-来发送和接收数据。示例ch - v 表示将值v发送到管道chv : -ch 表示从管道ch接收值并赋给变量v。 无缓冲与有缓冲 无缓冲管道发送操作会阻塞直到另一端有goroutine进行接收操作。有缓冲管道只有当缓冲区满时发送操作才会阻塞只有当缓冲区空时接收操作才会阻塞。 使用场景 同步管道可用于不同goroutines之间的同步。数据共享通过管道安全地在goroutines之间传递数据防止竞争条件。流程控制通过有缓冲管道控制处理速度和压力。 重要特性 安全性管道在内部实现了必要的同步机制因此在多个goroutines访问时是安全的。 阻塞性无缓冲管道在发送或接收时会阻塞直到另一端准备好。 关闭管道 使用close函数关闭管道。 关闭管道后不能再向管道发送数据但仍可以接收管道中已存在的数据。 尝试向已关闭的管道发送数据会引发panic。 范围循环可以使用for range循环从管道接收数据直到管道被关闭。 注意事项 死锁如果不正确使用管道特别是在管道操作之间没有适当的同步时可能导致死锁。资源管理应确保在不再需要时关闭管道以避免内存泄漏。 4.管道channel实现阶乘计算 package mainimport (fmtsync )var (ch make(chan int) // FIFO 队列 first in first out 线程安全wg2 sync.WaitGroup // 用于等待所有goroutine完成 )func main() {for i : 1; i 10; i {// 添加WaitGroup的计数wg2.Add(1)go calChannel(i)}wg2.Wait() // 等待所有goroutine完成close(ch) // 关闭通道// 启动一个新的goroutine来打印管道中的值go func() {for v : range ch {fmt.Println(v)}}()}func calChannel(n int) {defer wg2.Done() // 在函数退出时通知WaitGroup// 通过通道计算阶乘res : 1for i : 1; i n; i {res * i}ch - res } 三. interface{}类型 package mainimport fmtfunc main() {ch : make(chan interface{}, 3)ch - 88ch - i am godcat : Cat{Name: 小花猫, Age: 4}ch - catclose(ch)// 丢弃管道中的值-ch-chv : -chfmt.Printf(%T, v)fmt.Println()// 需要类型断言 ∵从管道中取出的值类型实际是interface{}类型 只有空接口类型才可以类型断言val : v.(Cat)fmt.Printf(%v, val.Name)}type Cat struct {Name stringAge int }
http://www.hkea.cn/news/14362073/

相关文章:

  • phpcms 网站转移网络规划设计方案模板
  • 简单大气的成品网站网站开发公司的选择
  • 网站编排动态表白网站制作
  • 金馆长做图网站开发一整个网站要多久
  • 站长之家ppt模板专业网页制作
  • 南宁培训网站建设那个网站做图片
  • 网站建设对宣传的意义医院网站建设医生需要做什么
  • 中文域名网站网站建设 网站开发 区别
  • 医院网站站群建设清河网站建设多少钱
  • 网站vr用什么做小白源码网
  • 室内设计师网站十大网站浙江省网站icp备案多久
  • 大姚网站建设网站开发学些什么软件
  • 过年做啥网站能致富额尔古纳做网站
  • 做网站都要买出口带宽吗广告平台
  • 龙海网站开发合肥建设工程信息网站
  • 海淀手机网站建设节庆时候的网站是怎么做的
  • 建设银行手机银行官方网站下载安装网站建设详细教程视频
  • 专业上海网站建设外贸汽车网站
  • dz论坛网站需要我找别人做的网站现在不管了怎么办
  • 番禺网站建设gzhchl中国设计人才网
  • 吉林省建设工程造价网站欧美风格的网站
  • 南昌网站制作方案定制长沙有哪些网络平台公司
  • 苏州做网站建设网站建设公司 项目经理 的工作指责
  • 网站建设的编程模具外贸网站建设
  • 建设银行jo 办网站用卡手机微信网页版登录
  • 网站这么做404页面小米开发者模式
  • 可以做婚礼鲜花布置的网站官网网址
  • 教人做美食的网站wordpress 平台
  • 网站开发毕业设计文献综述asp网站改php网站方法
  • 黄村网站开发公司电话wordpress先使用说明