GO:傻瓜式并发与并行。
欢迎来到这篇带有贬义标题的帖子。
但是,在这篇文章中,我想以一种非常简单的方式向您解释编程的这两个特征,这次使用我最喜欢的编程语言GOLANG。
让我们想象一个厨房:
做饭:这代表一个任务。
厨师:他是一个加工者。
出席人数:
厨房里的几位厨师:每个人准备不同的菜肴。
在 Go 中:每个厨师都是一个 goroutine。虽然厨房(处理器)只有一台烤箱,但厨师们可以同时处理自己的菜肴,在等待烤箱可用的同时将时间花在其他任务上。
并行度:
各种烤箱:每个厨师都有自己的烤箱。
在 Go 中:如果我们有多个物理处理器,每个 goroutine 都可以在不同的处理器上运行,以真正的方式同时烹饪多个菜肴。
有什么区别?
并发:即使在单个处理器上,任务也是交织执行的,给人一种并行的错觉。
并行性:任务在多个处理器上同时运行,这显着加快了进程。
如何在 Go 中使用它们?
Goroutines:它们就像轻线程。要创建 goroutine,我们只需在函数前使用 go 关键字即可:
让我们看一个如何在 golang 中使用 goroutine 的示例:
go func() { // Código que se ejecutará en una goroutine }()
通道:这些是 goroutine 可以进行通信和同步的管道。
想象一下它们是在厨师之间传递食材的管子
ch := make(chan int) go func() { ch <- 42 // Enviar un valor por el canal }() value := <-ch // Recibir un valor del canal
实际示例:
package main import ( "fmt" "time" ) func worker(id int, c chan int) { for n := range c { fmt.Printf("Worker %d received %d\n", id, n) time.Sleep(time.Second) } } func main() { c := make(chan int) for i := 1; i <= 5; i++ { go worker(i, c) } for n := 1; n <= 10; n++ { c <- n } close(c) time.Sleep(time.Second) }
这段代码的输出将是
Worker 1 received 1 Worker 2 received 2 Worker 3 received 3 Worker 4 received 4 Worker 5 received 5 Worker 1 received 6 Worker 2 received 7 Worker 3 received 8 Worker 4 received 9 Worker 5 received 10
虽然有时它可能看起来像这样
Worker 5 received 1 Worker 1 received 3 Worker 2 received 2 Worker 4 received 5 Worker 3 received 4 Worker 3 received 6 Worker 5 received 10 Worker 2 received 8 Worker 4 received 7 Worker 1 received 9
或者像这样
Worker 5 received 1 Worker 1 received 2 Worker 2 received 3 Worker 3 received 4 Worker 4 received 5 Worker 1 received 6 Worker 2 received 7 Worker 3 received 8 Worker 5 received 9 Worker 4 received 10
为什么每次运行程序时输出都会改变?
程序输出每次运行都会改变的主要原因是并发的不确定性。
这是正在发生的事情的详细信息:
创建通道:make(chan int) 创建一个整数通道。该通道将用于 goroutine 之间的通信。
启动 goroutine:循环 for i := 1;我 工作函数接收 ID 和通道。
发送值到通道:n := 1 的循环; n 1 到 10 的值发送到通道。
关闭通道:close(c)调用关闭通道,表示不会再发送任何值。
从通道接收值:每个 goroutine 使用 for n := range c 循环从通道接收值。当接收到一个值时,它会被打印到控制台。
等待 goroutine 完成: time.Sleep(time.Second) 调用确保主 goroutine 在退出之前等待其他 goroutine 完成。
到目前为止:
我们创建 5 个 goroutine(cook),通过通道接收数字。
我们将号码发送到频道供厨师处理。
厨师们同时工作,在收到数据时对其进行处理。
为什么在 Go 中使用并发和并行?
更好的性能:特别是在 I/O 密集型任务中(例如读取文件或发出 HTTP 请求)。
提高响应能力:任务锁定时应用程序可以继续响应其他请求。
更具可扩展性的架构:您可以跨多个核心或机器分配工作。
记住!
并发和并行性是强大的工具,但它们也会使代码更难以理解和调试。仔细使用它们并理解它们的含义非常重要。
您想深入了解某个特定主题吗?
我们可以探索以下概念:
同步:互斥体、工作组等
并发模式:生产者-消费者、管道等
并发测试:如何有效测试并发代码。
您好,
卢卡托尼·劳达尔斯
X/Twitter
GitHub
以上是GO:傻瓜式并发与并行。的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Golang在性能和可扩展性方面优于Python。1)Golang的编译型特性和高效并发模型使其在高并发场景下表现出色。2)Python作为解释型语言,执行速度较慢,但通过工具如Cython可优化性能。

Golang在并发性上优于C ,而C 在原始速度上优于Golang。1)Golang通过goroutine和channel实现高效并发,适合处理大量并发任务。2)C 通过编译器优化和标准库,提供接近硬件的高性能,适合需要极致优化的应用。

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

Golang适合快速开发和并发场景,C 适用于需要极致性能和低级控制的场景。1)Golang通过垃圾回收和并发机制提升性能,适合高并发Web服务开发。2)C 通过手动内存管理和编译器优化达到极致性能,适用于嵌入式系统开发。

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。 Golang以其并发模型和高效性能着称,Python则以简洁语法和丰富库生态系统着称。

Golang和C 在性能上的差异主要体现在内存管理、编译优化和运行时效率等方面。1)Golang的垃圾回收机制方便但可能影响性能,2)C 的手动内存管理和编译器优化在递归计算中表现更为高效。

Golang和C 在性能竞赛中的表现各有优势:1)Golang适合高并发和快速开发,2)C 提供更高性能和细粒度控制。选择应基于项目需求和团队技术栈。

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t
