美文网首页
比较C、C++、GO、python、python编译的so,运行

比较C、C++、GO、python、python编译的so,运行

作者: 技术创造未来 | 来源:发表于2024-03-06 11:27 被阅读0次

很多人诟病的python运行效率问题。我们来做个对比。
同样写一段斐波那契数列程序,对比一下以上几种语言的运行效率。
C程序:

#include <stdio.h>
#include <time.h>

int fib(int n)
{
    if (n <= 1)
    {
        return n;
    }
    else
    {
        return fib(n - 1) + fib(n - 2);
    }
}

int main()
{
    clock_t start, end;
    double cpu_time_used;
    start = clock();  // 开始计时
    int n;
    printf("请输入一个整数: ");
    scanf("%d", &n);
    fib(n);
    end = clock();  // 结束计时
    cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;  // 计算时间
    printf("程序执行时间为: %f seconds\n", cpu_time_used);
    return 0;
}

C++程序:

#include <bits/stdc++.h>
#include <ctime>
#define CLOCK_PER_SEC 1000
using namespace std;
typedef long long ll;
ll step=0,cnt=0;

int Digui(ll step)
{
        cnt++;
        if(step==1||step==2)
        {
                return 1;
        }
        return Digui(step-1)+Digui(step-2);
}

int main()
{
        clock_t  start = clock();
        Digui(40);
        clock_t end = clock();
        cout<<"花费了:"<<(double)(end-start)/CLOCK_PER_SEC<<"毫秒"<<endl;
        return 0;
}

Go程序:

package main

import (
        "fmt"
        "time"
)

func Fib(n int) int {
        if n == 1 || n == 2 {
                return 1
        }
        return Fib(n-2) + Fib(n-1)
}

func main() {
        now_t := time.Now()
        Fib(40)
        end_t := time.Now()
        fmt.Println("时间差:", end_t.Sub(now_t))
}

python程序

import time
def fib(n):
    if n == 1 or n == 2:
        return 1
    return fib(n - 1) + fib(n - 2)


if __name__ == '__main__':
    start_time = time.time()
    fib(40)
    end_time = time.time()
    print("消耗时间:",end_time-start_time)

python 编译成so文件,程序跟Python是一致的,只是把python编译成了so二级制,再调用执行:
算的是,40以内的斐波那契数列。C和C++编译时,使用的-03优化。还可以使用缓存优化,考虑到对比的公平性没有做。时间单位统一成了秒。其中C++和Go语言的运行时间,两次时间有点儿接近,采用多次运行取最大。


image.png

结论:C语言最快,Go语言性能跟C++接近,python可以编译成so执行会使效率提升3-4倍。python需要效率的地方,可以使用numpy或者pandas执行,由于是C开发的,效率更高。

相关文章

网友评论

      本文标题:比较C、C++、GO、python、python编译的so,运行

      本文链接:https://www.haomeiwen.com/subject/fnjjzdtx.html