單線程和多線程的區別單線程是什么意思?
假如說現在有下面四個問題:
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。