多进程、多线程、多协程对单核、多核CPU的消耗

     原文发表于我的微信公众号"涛歌依旧",可以点击如下红色文字链接阅读:

   多进程、多线程、多协程对单核、多核CPU的消耗(链接)
 


 
      从微信公众号把原文直接复制过来,内容如下(图片和表格可能丢失,格式可能错乱,故建议直接点击上述红色链接阅读):

 

       春节假期开始,今天是第一天,开始打扫房子了,顺便写一写。

 

      搞后台开发,不仅需要关注服务的功能,还需要关注服务的性能。在本文中,我们简要地来看看多进程、多线程、多协程对单核、多核CPU的消耗。

 

对单核CPU的消耗

       C语言死循环程序如下:

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

        

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

多进程、多线程、多协程对单核、多核CPU的消耗_第1张图片

         

 

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

多进程、多线程、多协程对单核、多核CPU的消耗_第2张图片

 

       C语言多线程程序如下:

#include 
#include 
#include 

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个核:

多进程、多线程、多协程对单核、多核CPU的消耗_第3张图片

   

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

多进程、多线程、多协程对单核、多核CPU的消耗_第4张图片

       

C语言多线程程序如下:

#include 
#include 
#include 

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的消耗_第5张图片

 

      可见,在多核情况下,采用多进程、多线程、多协程,能更好地利用CPU, 它们不仅能并发执行,而且能并行执行。

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

 

 

      通过本文的验证,我们能更好地理解多进程、多线程、多协程对单核、多核CPU的消耗,顺便理解并发和并行的含义与区别。在开发后台服务时,也能更好地理解服务的性能和瓶颈,做出更好的服务。

 

多进程、多线程、多协程对单核、多核CPU的消耗_第6张图片

长按或扫描二维码  可关注涛哥公众号

你可能感兴趣的:(s2:,软件进阶,s2:,后台开发,s4:,计算机组成)