1.6.1 以并發(fā)的思想指導(dǎo)設(shè)計
在設(shè)計代碼發(fā)揮多核優(yōu)勢的時候,非常重要的一點在于不能認為運行在C#應(yīng)用程序中的代碼是孤立運行的。C#已經(jīng)支持并發(fā)代碼,因此很多代碼片段能夠同時運行在同一個進程中,或者以交錯執(zhí)行的方式運行。同樣的類方法可以在并發(fā)代碼中執(zhí)行。如果這個方法在靜態(tài)變量中保存了一個狀態(tài),之后又使用了這個已保存的狀態(tài),那么很多并發(fā)執(zhí)行可能會導(dǎo)致異常且不可預(yù)測的結(jié)果。
如前所述,多核處理器的并行程序設(shè)計使用了共享內(nèi)存的模型。數(shù)據(jù)保存在同一個共享內(nèi)存中,因此,如果設(shè)計的時候沒有考慮并發(fā)的問題,那么就有可能造成異常結(jié)果。
在設(shè)計類和方法時,最好將它們設(shè)計為能夠沒有副作用(side effect)地并發(fā)運行。如果類、方法和組件在設(shè)計的時候沒有考慮到并發(fā),那么在并行化的代碼中使用它們的時候最好對它們的設(shè)計進行測試。
在設(shè)計過程中找出的每一個子問題都應(yīng)該能夠在其他子問題并發(fā)執(zhí)行的同時執(zhí)行。如果您覺得由于某個子問題使用了遺留的類、方法或組件,因此當(dāng)這個子問題運行的時候應(yīng)該限制并發(fā)代碼,那么應(yīng)該在設(shè)計文檔中將這個問題闡述清楚。一旦開始使用并行化代碼,很容易與其他既有的類、方法和組件進行協(xié)作,而那些類、方法和組件很可能會產(chǎn)生不必要的副作用,因為它們在設(shè)計的時候并沒有考慮并發(fā)執(zhí)行。