大家好,我是涛哥,又是周末,祝愿大家开心。
今天,不分享复杂高深的东西了,仅来聊聊进程、线程、协程对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 mainfunc 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的消耗,顺便理解并发和并行的含义与区别。

![战神引擎传奇手游【1.76盛战传奇免授权版[摸摸登陆器]】最新整理Win系复古服务端+安卓苹果双端+GM授权物品后台+详细搭建教程](https://cdn.jxasp.com:9143/image/20251106/1B4E8594B3BEB90E8601D63A8A39CB0B.jpg)

















