并发使用方式的不同语言简单例子

举报
码乐 发表于 2025/10/08 09:08:41 2025/10/08
【摘要】 1 简介Go,又称Golang,是Google于2009年开发的一种静态类型编译语言。多年来,它因其简单性、高效性和可扩展性而广受欢迎。在微服务开发方面,Go 从其他编程语言中脱颖而出,因为它具有独特的功能,使其成为构建健壮、可扩展和可维护系统的理想选择。在这篇博文中,我们介绍并发功能使其非常适合微服务开发。 2 并发的 Goroutines以下代码使用 goroutines 同时运行两个...

1 简介

Go,又称Golang,是Google于2009年开发的一种静态类型编译语言。多年来,它因其简单性、高效性和可扩展性而广受欢迎。

在微服务开发方面,Go 从其他编程语言中脱颖而出,因为它具有独特的功能,使其成为构建健壮、可扩展和可维护系统的理想选择。在这篇博文中,我们介绍并发功能使其非常适合微服务开发。

2 并发的 Goroutines

以下代码使用 goroutines 同时运行两个函数,同时打印数字和字母。

    package main

    import (
        "fmt"
        "time"
    )

    func printNumbers() {
        for i := 1; i <= 5; i++ {
            time.Sleep(500 * time.Millisecond)
            fmt.Println(i)
        }
    }

    func printLetters() {
        for i := 'a'; i <= 'e'; i++ {
            time.Sleep(500 * time.Millisecond)
            fmt.Printf("%c\n", i)
        }
    }

    func main() {
        go printNumbers()
        go printLetters()
        time.Sleep(3000 * time.Millisecond)
    }

Go 并发编程中最核心的特性之一:goroutines。我们来对比 Go 和 Python 在实现类似“并发运行两个任务”的方式,并深入分析它们各自的优缺点。

  • Go 并发示例回顾:

      go printNumbers()
      go printLetters()
    

通过使用 go 关键字,这两个函数就以轻量级的goroutine形式并发运行了。

3、Python 实现类似功能的方式

Python 标准库提供了几种实现并发的方法,我们可以用 threading 模块模仿 Go 的行为:

      import threading
      import time

      def print_numbers():
          for i in range(1, 6):
              time.sleep(0.5)
              print(i)

      def print_letters():
          for c in ['a', 'b', 'c', 'd', 'e']:
              time.sleep(0.5)
              print(c)

      t1 = threading.Thread(target=print_numbers)
      t2 = threading.Thread(target=print_letters)

      t1.start()
      t2.start()

      t1.join()
      t2.join()
  • 并发模型对比分析:Go vs Python

     特性 			 Go(Goroutines) 				 	Python(Threading)
    简洁  		非常简单,go func() 启用并发		 稍复杂,需手动创建 Thread 对象
     开销  		非常轻(几 KB 的栈空间)  		较重,是真正的 OS 线程
     并发数量  		支持成千上万的 goroutines  		线程数量有限(数百)
     GIL(全局解释器锁)   没有,原生支持多核并发 		有 GIL,多个线程不能真正并行运行 Python 字节码(CPU 密集任务受限)
     调度 		 Go 内置调度器(M:N 模型)   	 OS 原生调度,线程切换开销大
     通信 	 通道(Channel),更易于管理并发 		无内建通信机制,需使用队列或锁
     语言层支持 并发是 Go 的核心特性,语法级支持  并发是库级别支持
     错误处理  支持 select、context 控制 goroutines 生命周期    手动管理线程状态,复杂且易错
    

💬 五、总结

Go 的并发更强大、更轻量、更适合高并发应用场景。它的 goroutines 和 channel 是为并发而设计的原生语言特性。

Python 的线程更适合轻量并发或 I/O 操作,但受 GIL 限制,在 CPU 密集场景下表现差。

Python 也可以使用 asyncio(协程)提升并发能力,但编程模型更复杂。

使用场景:

场景  							推荐语言   						 原因
高并发(网络服务器、爬虫、微服务)   Go  			goroutine 超轻量,能同时处理数万个连接
I/O 密集型(文件处理、网络请求)  Go 或 Python(asyncio)    Python 的异步协程也适合 I/O 密集任务
CPU 密集型(图像处理、数值计算)  Go  			Python 因 GIL 限制,多线程无效,需要多进程或 C 扩展
快速开发、原型验证   Python  					开发效率高,生态丰富
控制并发、共享资源复杂的系统  Go  				Channel 更容易写出安全、清晰的并发代码
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。