进程、线程、协程对CPU的消耗

972 篇文章 329 订阅
461 篇文章 67 订阅

大家好,我是涛哥,又是周末,祝愿大家开心。 

今天,不分享复杂高深的东西了,仅来聊聊进程、线程、协程对CPU的消耗问题,并用实际代码来验证,加深对这些概念的理解。

另外,值得一提的是,进程、线程、协程几乎是笔试面试必考的内容。而且,在实际开发中,也有必要深入理解这些基础概念。

一. 单核CPU的消耗

C语言死循环程序如下:

int main(){    while(1);    return 0;}

开启单进程,可以看到,大约消耗100%的CPU核:

图片

开启2个进程,可以看到,总共大约消耗100%的CPU核:

图片

C语言多线程程序如下:

  • #include <stdio.h>
#include <unistd.h>#include <pthread.h>
void* threadFunc(void* p){    while (1);    return NULL;}
int main (){    printf("main thread id is %u\n", pthread_self());
    pthread_t id;    pthread_create (&id, NULL, threadFunc, NULL);    while (1);
    return 0;}

        

2个线程总共大约消耗100%的CPU核:

图片

Go语言多协程程序如下:

  • package main func f() { for {}} func main (){ go f() for {}}

2个协程总共大约消耗100%的CPU核:

图片

通过如上实际验证可以发现:在单核CPU情况下,无论怎么开启进程、线程和协程,最多消耗100%的CPU核。

二. 多核(32核)CPU的消耗

 

C语言死循环程序如下:

int main(){    while(1);    return 0;}

   

开启单进程,大约消耗100%的CPU核,即1个核:

图片

   

开启2个进程,总共大约消耗200%的CPU核,即2个CPU核:

图片

       

C语言多线程程序如下:

​​​​​​​

#include <stdio.h>#include <unistd.h>#include <pthread.h>
void* threadFunc(void* p){    while (1);
    return NULL;}
int main (){    printf("main thread id is %u\n", pthread_self());
    pthread_t id;    pthread_create (&id, NULL, threadFunc, NULL);    while (1);
    return 0;}

 

2个线程总共大约消耗200%的CPU核,即2个CPU核:

图片

Go语言多协程程序如下:​​​​​​​

package main
func f() {    for {}}
func main (){    go f()    for {}}

       

2个协程总共大约消耗200%的CPU核,即2个CPU核:

图片

通过实际验证可以发现:在多核情况下,采用多进程、多线程、多协程,能更好地利用CPU, 它们不仅能并发执行,而且能并行执行。

另外,值得一提的是,即使在单核情况下,多进程、多线程、多协程也是能更好利用CPU的。想一想,为什么?这是很基本的问题。

通过本文的实际验证,我们能更好地理解多进程、多线程、多协程对单核、多核CPU的消耗,顺便理解并发和并行的含义与区别。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值