type
status
date
slug
summary
tags
category
icon
password
URL
Go语言中的并发(concurrency)和并行(parallelism)是两个相关但不同的概念。
并发是指同时执行多个任务的能力,它是一种程序设计的方式,通过将任务分解为多个独立的部分,每个部分可以独立执行,从而提高程序的性能和响应能力。在Go语言中,可以使用goroutine和channel来实现并发。goroutine是一种轻量级的线程,可以同时执行多个goroutine,而channel则是用于goroutine之间的通信和同步的机制。
并行是指同时执行多个任务的能力,它是一种物理上的概念,指的是在多个处理器上同时执行多个任务。在Go语言中,可以使用goroutine和多核处理器来实现并行。通过将任务分解为多个独立的goroutine,然后将这些goroutine分配到多个处理器上执行,从而实现并行执行。
总结起来,Go语言中的并发是一种程序设计的方式,通过将任务分解为多个独立的部分来提高性能和响应能力;而并行是一种物理上的概念,指的是在多个处理器上同时执行多个任务。
📝 主旨内容
并发与并行的区别
并发
并发(concurrency): 是指同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行。宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行,
只是把时间划分为若干段,使多个进程快速交替执行指令。
并行
并行(parallel): 是指同一时刻多个进程在多个处理器上同时执行。
让不同的代码片段同时在不同的物理处理器上执行。
通过具体的案例讲解这两者的区别以及如何应用
假设我们有一个需求,需要从一个数组中找到最大值并计算其平方根。我们可以使用并发和并行来加速这个过程。
首先,我们来看看如何使用并发来解决这个问题。
在Go语言中,可以使用goroutine和channel来实现并发。我们可以将数组分成多个部分,每个部分由一个goroutine来处理,然后将结果通过channel进行汇总。
上述代码中,我们将数组分成两个部分,每个部分由一个goroutine来处理。每个goroutine找到部分数组的最大值,并将结果发送到result通道中。
然后,我们使用一个goroutine来等待所有goroutine执行完毕,并关闭result通道。
最后,我们从result通道中读取结果,找到最大值的平方根并打印出来。
接下来,我们来看看如何使用并行来解决这个问题。
在Go语言中,可以使用goroutine和多核处理器来实现并行。
我们可以将数组分成多个部分,每个部分由一个goroutine在不同的处理器上执行。
上述代码中,我们通过设置
runtime.GOMAXPROCS(runtime.NumCPU())来告诉Go语言使用多个处理器。然后,我们将数组分成两个部分,每个部分由一个goroutine在不同的处理器上执行。其他部分的代码与并发的例子相同。
通过并发和并行的方式,我们可以加速数组中最大值的查找和计算平方根的过程。
并发可以将任务分解为多个独立的部分,并且可以在单个处理器上同时执行这些部分,从而提高性能。
而并行则可以将任务分配到多个处理器上同时执行,进一步提高性能。
🤗 总结归纳
总结文章的内容
📎 参考文章
- 一些引用
- 引用文章
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:NotionNext
- 链接:https://tangly1024.com/article/example-3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。