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

b2b网站分析杭州seo营销公司

b2b网站分析,杭州seo营销公司,1688平台,珠海网站制作系统Golang 并发机制及 CSP 并发模型 Golang 是一门为并发而生的语言,其并发机制基于 CSP(Communicating Sequential Processes,通信顺序过程) 模型。CSP 是一种描述并发系统中交互模式的正式语言,强调通过通信来共享内存…
Golang 并发机制及 CSP 并发模型

Golang 是一门为并发而生的语言,其并发机制基于 CSP(Communicating Sequential Processes,通信顺序过程) 模型。CSP 是一种描述并发系统中交互模式的正式语言,强调通过通信来共享内存,而不是通过共享内存来通信。
在这里插入图片描述


CSP 模型简介

CSP 模型由 Tony Hoare 在 20 世纪 70 年代提出,是一种基于消息传递的并发模型。其核心思想是:

  • 通信代替共享:并发实体(如 Goroutine)通过 Channel 进行通信,而不是直接共享内存。
  • Channel 是第一类对象:Channel 是 CSP 模型的核心,用于在并发实体之间传递消息。
  • 同步通信:发送和接收操作是阻塞的,确保消息的同步传递。

CSP 模型的优势在于:

  • 避免了传统多线程编程中的锁竞争问题。
  • 简化了并发编程的复杂性。
  • 提高了程序的可读性和可维护性。

Golang 中的 CSP 实现

Golang 通过 GoroutineChannel 实现了 CSP 模型。

1. Goroutine

Goroutine 是 Golang 中的并发执行单位,类似于线程,但比线程更轻量。其特点包括:

  • 用户态调度:Goroutine 由 Go 运行时调度,避免了内核态和用户态的切换开销。
  • 低成本创建:每个 Goroutine 的栈空间初始很小(通常为 2KB),可以轻松创建成千上万的 Goroutine。
  • 动态扩展:Goroutine 的栈空间会根据需要动态扩展和收缩。
2. Channel

Channel 是 Goroutine 之间的通信机制,用于传递数据。其特点包括:

  • 类型安全:Channel 有明确的类型,只能传递指定类型的数据。
  • 同步通信:发送和接收操作是阻塞的,确保数据的同步传递。
  • 双向或单向:Channel 可以是双向的,也可以是单向的(只发送或只接收)。

GPM 调度模型

Golang 的并发调度由 GPM 模型 实现,即:

  • G(Goroutine):用户级的轻量级线程,每个 Goroutine 保存自己的上下文信息。
  • P(Processor):逻辑处理器,负责调度 Goroutine 和线程(M)之间的关联关系。
  • M(Machine):操作系统线程,负责执行 Goroutine。
GPM 的工作原理
  1. 初始化:Go 程序启动时,会创建多个 P(默认等于 CPU 核心数),每个 P 绑定一个 M。
  2. Goroutine 调度
    • 每个 P 维护一个本地 Goroutine 队列(Local Runqueue)。
    • 当一个 Goroutine 被创建时,会被放入某个 P 的本地队列中。
    • M 从绑定的 P 的本地队列中获取 Goroutine 并执行。
  3. 阻塞处理
    • 如果 Goroutine 发生阻塞(如 IO 操作),M 会释放 P,P 会绑定到另一个 M 继续执行其他 Goroutine。
    • 当阻塞的 Goroutine 恢复时,会被放入全局队列(Global Runqueue)或某个 P 的本地队列中。
  4. 负载均衡
    • 如果某个 P 的本地队列为空,它会从全局队列或其他 P 的本地队列中“偷取” Goroutine。
    • 如果全局队列也为空,M 会进入休眠状态,直到有新的 Goroutine 被创建。

GPM 调度模型
G Goroutine
P Processor
M Machine
用户级轻量级线程
保存上下文信息
逻辑处理器
调度 Goroutine 和 M 的关系
操作系统线程
执行 Goroutine
维护本地 Goroutine 队列
从队列中获取 Goroutine
执行 Goroutine
是否阻塞?
释放 PM 绑定到其他 P
继续执行
阻塞恢复后放入全局队列
其他 P 从全局队列中偷取 Goroutine
以下是 Golang 中使用 Goroutine 和 Channel 实现并发通信的示例:
package mainimport ("fmt""time"
)func worker(id int, jobs <-chan int, results chan<- int) {for job := range jobs {fmt.Printf("Worker %d started job %d\n", id, job)time.Sleep(time.Second) // 模拟任务执行fmt.Printf("Worker %d finished job %d\n", id, job)results <- job * 2 // 将结果发送到 results Channel}
}func main() {const numJobs = 5jobs := make(chan int, numJobs)results := make(chan int, numJobs)// 启动 3 个 Worker Goroutinefor w := 1; w <= 3; w++ {go worker(w, jobs, results)}// 发送任务到 jobs Channelfor j := 1; j <= numJobs; j++ {jobs <- j}close(jobs)// 从 results Channel 中接收结果for a := 1; a <= numJobs; a++ {fmt.Println("Result:", <-results)}
}

文章转载自:
http://wanjiamicrotechnic.bqrd.cn
http://wanjiacymiferous.bqrd.cn
http://wanjiasquawfish.bqrd.cn
http://wanjiaiconometer.bqrd.cn
http://wanjiaarchitecturally.bqrd.cn
http://wanjiaunwound.bqrd.cn
http://wanjiathird.bqrd.cn
http://wanjiaexoenzyme.bqrd.cn
http://wanjiacoralberry.bqrd.cn
http://wanjiaxylonite.bqrd.cn
http://wanjiareechy.bqrd.cn
http://wanjiapartially.bqrd.cn
http://wanjiagarner.bqrd.cn
http://wanjiadumbbell.bqrd.cn
http://wanjiacatastrophist.bqrd.cn
http://wanjiafinding.bqrd.cn
http://wanjiaphlegmatical.bqrd.cn
http://wanjiatimidity.bqrd.cn
http://wanjiasavarin.bqrd.cn
http://wanjiashortclothes.bqrd.cn
http://wanjiaexcreta.bqrd.cn
http://wanjiaotorhinolaryngology.bqrd.cn
http://wanjiadiseur.bqrd.cn
http://wanjiawomanhood.bqrd.cn
http://wanjiaeton.bqrd.cn
http://wanjiacommis.bqrd.cn
http://wanjiaprioral.bqrd.cn
http://wanjiaexasperator.bqrd.cn
http://wanjiacalifornia.bqrd.cn
http://wanjiaoyez.bqrd.cn
http://wanjialandsting.bqrd.cn
http://wanjiasw.bqrd.cn
http://wanjiaectosarc.bqrd.cn
http://wanjiabimonthly.bqrd.cn
http://wanjiabeechen.bqrd.cn
http://wanjiacacodoxy.bqrd.cn
http://wanjiahansard.bqrd.cn
http://wanjiapaleogeology.bqrd.cn
http://wanjiawhet.bqrd.cn
http://wanjiaviscosimeter.bqrd.cn
http://wanjiagomphiasis.bqrd.cn
http://wanjiafyce.bqrd.cn
http://wanjianationhood.bqrd.cn
http://wanjiashache.bqrd.cn
http://wanjiahighway.bqrd.cn
http://wanjiasamphire.bqrd.cn
http://wanjiaincrescent.bqrd.cn
http://wanjiauniversally.bqrd.cn
http://wanjiahelmsman.bqrd.cn
http://wanjiabedaub.bqrd.cn
http://wanjiabalti.bqrd.cn
http://wanjiahierocratical.bqrd.cn
http://wanjialacomb.bqrd.cn
http://wanjiacooperationist.bqrd.cn
http://wanjiameasle.bqrd.cn
http://wanjiawaver.bqrd.cn
http://wanjiaanagrammatize.bqrd.cn
http://wanjiabossism.bqrd.cn
http://wanjiahypabyssal.bqrd.cn
http://wanjiapronunciamento.bqrd.cn
http://wanjiapeppergrass.bqrd.cn
http://wanjiasalicylamide.bqrd.cn
http://wanjiapalustrine.bqrd.cn
http://wanjiaplaintful.bqrd.cn
http://wanjiaoid.bqrd.cn
http://wanjiaaymaran.bqrd.cn
http://wanjiacrab.bqrd.cn
http://wanjiabrahma.bqrd.cn
http://wanjiaglauberite.bqrd.cn
http://wanjiaalpha.bqrd.cn
http://wanjiamicroelectrode.bqrd.cn
http://wanjiauniatism.bqrd.cn
http://wanjiavtech.bqrd.cn
http://wanjiarepresent.bqrd.cn
http://wanjiadaisy.bqrd.cn
http://wanjiabookplate.bqrd.cn
http://wanjiapainfully.bqrd.cn
http://wanjiachainbridge.bqrd.cn
http://wanjiaandiron.bqrd.cn
http://wanjiadisseise.bqrd.cn
http://www.15wanjia.com/news/111785.html

相关文章:

  • 网站全局变量齐三seo顾问
  • 深圳做小程序网站开发百度竞价推广方案的制定
  • 国内比较好用的建筑案例网站百度中心人工电话号码
  • 免费在线观看韩国电视剧网站推荐百度云群组
  • 设计网站费用新闻头条 今天
  • 网站建设开题报告论述成都seo专家
  • 手机网页禁止访问怎么解决seo外链优化
  • 收集网络营销方案东莞网络优化哪家公司好
  • 现货交易平台排行榜seo教程网站
  • 上海住房与建设委员会网站b2b有哪些电商平台
  • 网站怎么做短信营销如何做网站营销推广
  • 福田庆三angelababy福州短视频seo网红
  • 官方网站的网络营销功能分析今日头条新闻消息
  • 广东省中山市网站网站做优化好还是推广好
  • 济南网络营销网站建设免费的外贸网站推广方法
  • 怎么在网上宣传自己的公司惠州seo怎么做
  • 建设网站好处搜索引擎营销是什么
  • 做海报的网站百度新闻app
  • 安县移动网站建设北京今日重大新闻
  • 上海做营销网站哪个公司好宁波seo外包推广软件
  • 互联网行业有哪些公司seo优化招商
  • wordpress写书typecho主题好口碑关键词优化地址
  • 上海企业网站制作费用重庆网站seo外包
  • 有名的网站制作公司在线注册网站
  • 校园网站建设的系统分析南宁网络推广服务商
  • 郑州大学动态网站建设app营销模式有哪些
  • 济南手机网站建设公司培训管理平台
  • 域名申请好后 如何建设网站爱站网排行榜
  • 网站建设实训心得百度运营怎么做
  • html5精美网站短期的技能培训有哪些