假如說現在有下面四個問題:
1+1=a,1+2=b,2+3=c,4+5=d
單執行緒就是一個接一個的計算:
第一步:1+1=2,第二步:1+2=3,第三步:2+3=5,第四步:4+5=9
然後告訴你結果:
a=2, b=3, c=5, d=9
多執行緒,咱們就說四執行緒吧,就是同時計算四個問題:
第一步:
執行緒一:1+1=2
執行緒二:1+2=3
執行緒三:2+3=5
執行緒四:4+5=9
可見,多執行緒可以同時處理多個計算,計算能力似乎是成倍成比例上漲的,但是它有一個問題就是多個運算必須獨立,比如:
1+2=a,a+3=b
這種計算,你不知道a就沒法計算b,這種情況下就沒辦法多執行緒計算了。
再就是“競爭狀態”:
就是說多個執行緒互相等待對方結束,或者等待對方釋放資源。單執行緒的話所有的操作一定會是一個接一個的完成,所以不存在這個狀況。但如果多執行緒的話,排程沒有做好就很容易發生這種事情,比如不小心同時運行了本不應該同時執行的兩個執行緒,或者其中一個執行緒沒有在預定時間內結束就啟動了第二個執行緒。
單執行緒的好處就是易於程式設計,不需要考慮太多狀況,缺點是效率低。
多執行緒的好處是效率高,效能高,但是不是所有的運算都可以被並行化,而且容易出現各種意外的稀奇古怪的bug。
假如說現在有下面四個問題:
1+1=a,1+2=b,2+3=c,4+5=d
單執行緒就是一個接一個的計算:
第一步:1+1=2,第二步:1+2=3,第三步:2+3=5,第四步:4+5=9
然後告訴你結果:
a=2, b=3, c=5, d=9
多執行緒,咱們就說四執行緒吧,就是同時計算四個問題:
第一步:
執行緒一:1+1=2
執行緒二:1+2=3
執行緒三:2+3=5
執行緒四:4+5=9
然後告訴你結果:
a=2, b=3, c=5, d=9
可見,多執行緒可以同時處理多個計算,計算能力似乎是成倍成比例上漲的,但是它有一個問題就是多個運算必須獨立,比如:
1+2=a,a+3=b
這種計算,你不知道a就沒法計算b,這種情況下就沒辦法多執行緒計算了。
再就是“競爭狀態”:
就是說多個執行緒互相等待對方結束,或者等待對方釋放資源。單執行緒的話所有的操作一定會是一個接一個的完成,所以不存在這個狀況。但如果多執行緒的話,排程沒有做好就很容易發生這種事情,比如不小心同時運行了本不應該同時執行的兩個執行緒,或者其中一個執行緒沒有在預定時間內結束就啟動了第二個執行緒。
單執行緒的好處就是易於程式設計,不需要考慮太多狀況,缺點是效率低。
多執行緒的好處是效率高,效能高,但是不是所有的運算都可以被並行化,而且容易出現各種意外的稀奇古怪的bug。