使用go语言及Python语言实战把多核CPU跑满

简介: 一直有个疑问,Python及go能不能把多核CPU跑满,实践一把吧

机器配置

4核CPU


单线程代码

Python代码

whileTrue:
print("test")

go代码

packagemainimport"fmt"funcmain(){
for {
fmt.Println("test")
    }
}

都是死循环,如何把机器的CPU跑满


Python程序运行,top监控


go程序运行,top监控


看进程都把CPU跑满了100%,但我总共有4个CPU呢


接下来该怎么做?,上文代码中,都只有一个主线程执行,一个线程是无论如何也无法跑满多核CPU的


多线程代码

go版本,使用的是协程,GMP(超多个协程对应多个线程)

packagemainimport (
"fmt""time")
funcmain() {
fori :=0; i<200; i++ {
gofunc() {
for {
fmt.Println("test")
            }
        }()
    }
time.Sleep(100*time.Hour)
}

go程序再次运行,top监控


Python版本

importthreadingdefsay():
whileTrue:
print("test")
foriinrange(200):
threading.Thread(target=say).start()

python程序运行,top监控


好难啊,还没跑满CPU,可能是print打印这个不消耗CPU,那么搞点复杂的计算任务吧


多线程版本2

go版本

packagemainimport (
"fmt""time")
funcmain() {
fori :=0; i<200; i++ {
gofunc() {
for {
sum:=0fori :=1; i<=10000000; i++ {
sum+=i                }
fmt.Println(sum)
            }
        }()
    }
time.Sleep(100*time.Hour)
}

go程序运行,top监控

可以看到CPU已经达到376%,多核CPU资源已经基本上跑满了


Python版本

importthreadingdefsay():
whileTrue:
sum=0foriinrange(10000000):
sum+=iprint(sum)
foriinrange(200):
threading.Thread(target=say).start()

python程序运行,top监控

可以看到CPU使用率119%,并没有利用多核资源


Python多线程不能利用多核的资源,网上查找了下是因为GIL全局锁的原因,只能使用多进程

Python多进程

frommultiprocessingimportProcessdefsay():
whileTrue:
sum=0foriinrange(10000000):
sum+=iprint(sum)
foriinrange(4):
Process(target=say).start()


python程序运行,top监控

可以看到有4个Python进程,每个Python进程CPU都达到90%左右


结论: go可以充分利用多核资源,Python因为GIL锁的原因多线程并不能利用多核资源,需要用到多进程方式

目录
相关文章
|
1月前
|
算法 Go Python
获取指定范围符合正态分布的随机数Go/Python
获取指定范围符合正态分布的随机数Go/Python
35 0
|
2月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
1月前
|
Go Docker Python
docker的python与go镜像的制作
docker的python与go镜像的制作
30 1
|
1月前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
105 1
|
1月前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
41 0
|
1月前
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
87 0
|
1月前
|
机器学习/深度学习 自然语言处理 Go
Python与Go在AIGC领域的应用:比较与分析
Python与Go在AIGC领域的应用:比较与分析
46 0
|
2月前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
3月前
|
JSON 数据格式 Python
python中有哪些常用语言成分?
Python作为一种广泛使用的编程语言,其语言成分丰富多样,涵盖了多个方面。
61 9
|
2月前
|
人工智能 自然语言处理 文字识别
MinerU-大语言语料处理神器,CPU/GPU均可跑,开源免费“敲”好用
在7月4日举行的WAIC 2024科学前沿主论坛上,书生·浦语2.5正式发布,面向大模型研发与应用的全链条工具体系同时迎来升级。
MinerU-大语言语料处理神器,CPU/GPU均可跑,开源免费“敲”好用
下一篇
无影云桌面