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安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
模板说明示例文章1
NotionNext
NotionNext
一个普通的干饭人🍚
公告
type
status
date
slug
summary
tags
category
icon
password
URL
🎉NotionNext 4.0即将到来🎉
-- 感谢您的支持 ---
👏欢迎更新体验👏