美文网首页
2019-01-09python与go线程性能简单对比

2019-01-09python与go线程性能简单对比

作者: cuiyao50 | 来源:发表于2019-01-09 12:42 被阅读0次

    python与go线程性能简单对比

    2018年05月04日 18:11:51 疯琴 阅读数:690

    昨天看到一篇关于python多线程公众号文章,做了简单的对比试验。用python和go做单线程1亿递减到1和两个线程各自从5千万减到1,看程序执行时间:

    python一个线程:

    def decrement(n):

        while n > 0:

            n -= 1

    from time import perf_counter as pc

    start = pc()

    decrement(100000000)

    print(pc() - start)

    执行时间:

    14.351082861999998

    14.311808035000013

    13.47257553399993

    python两个线程:

    import threading

    t1 = threading.Thread(target=decrement, args=(50000000,))

    t2 = threading.Thread(target=decrement, args=(50000000,))

    start = pc()

    t1.start()

    t2.start()

    t1.join()

    t2.join()

    print(pc() - start)

    执行时间:

    40.047668924999925

    17.143103717999793

    36.23898320300009

    49.22135359899994

    34.21361186399986

    go一个线程:

    package main

    import "fmt"

    import "time"

    var c chan int

    func decrement(n int) {

        for n > 0 {

            n -= 1

        }

    }

    func main() {

        start := time.Now()

        decrement(100000000)

        fmt.Println(time.Since(start))

    }

    执行时间:

    434.60565ms

    425.799923ms

    421.821211ms

    459.630486ms

    go两个线程:

    package main

    import "fmt"

    import "time"

    var c chan int

    func decrement(n int) {

        for n > 0 {

            n -= 1

        }

        c <- 0

    }

    func main() {

        start := time.Now()

        c = make(chan int)

        go decrement(50000000)

        go decrement(50000000)

        <-c

        <-c

        fmt.Println(time.Since(start))

    }

    执行时间:

    51.382195ms

    61.355949ms

    42.02437ms

    53.019678ms

    38.299514ms

    结论

    实验环境是同一台虚拟机,python3.6.5,go1.10。

    python执行结果不稳定,双线程比单线程还慢,时间大约是一倍。

    go执行结果稳定,双线程比单线程快大约10倍。

    go比python单线程快n倍。

    相关文章

      网友评论

          本文标题:2019-01-09python与go线程性能简单对比

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