python與go執行緒效能簡單對比

2021-08-19 17:08:05 字數 1492 閱讀 8423

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

intfunc decrement(n int)

}func main()

434.60565ms

425.799923ms

421.821211ms

459.630486ms

go兩個執行緒:

package main

import

"fmt"

import

"time"

var c chan

intfunc decrement(n int)

c <-0

}func main()

51.382195ms

61.355949ms

42.02437ms

53.019678ms

38.299514ms

結論

實驗環境是同一臺虛擬機器,python3.6.5,go1.10。

python執行結果不穩定,雙線程比單執行緒還慢,時間大約是一倍。

go執行結果穩定,雙線程比單執行緒快大約10倍。

go比python單執行緒快n倍。

seastar與go的http效能差異

golang的coroutine好用,但是coroutine本身切換是需要有代價的,主要體現在記憶體棧的上下文切換。之前看過乙個c 的go風格的庫,叫libgo,根據其github主頁的benchmark,協程切換速率是要優於go的。但是這篇文章並非要和libgo比較,由於筆者之前接觸過scylla...

python與執行緒

同步概念 協同步調,按預定的先後次序執行 併發 不同時執行 執行緒 並行 同時執行 程序 同步原語 1.互斥鎖,2.訊號量原語,3.queue佇列 上下文管理器 with 死鎖 1.通過銀行家演算法解決,2.新增超時時間 模組 threading.thread 執行緒池 建立執行緒需要經過啟動 銷毀...

Python 多執行緒簡單案例 執行緒同步

codeing utf 8 import time import threading 執行緒同步 class mythead threading.thread def init self,name,delay threading.thread.init self self.name name sel...