1.6.1 以并发的思想指导设计
在设计代码发挥多核优势的时候,非常重要的一点在于不能认为运行在C#应用程序中的代码是孤立运行的。C#已经支持并发代码,因此很多代码片段能够同时运行在同一个进程中,或者以交错执行的方式运行。同样的类方法可以在并发代码中执行。如果这个方法在静态变量中保存了一个状态,之后又使用了这个已保存的状态,那么很多并发执行可能会导致异常且不可预测的结果。
如前所述,多核处理器的并行程序设计使用了共享内存的模型。数据保存在同一个共享内存中,因此,如果设计的时候没有考虑并发的问题,那么就有可能造成异常结果。
在设计类和方法时,最好将它们设计为能够没有副作用(side effect)地并发运行。如果类、方法和组件在设计的时候没有考虑到并发,那么在并行化的代码中使用它们的时候最好对它们的设计进行测试。
在设计过程中找出的每一个子问题都应该能够在其他子问题并发执行的同时执行。如果您觉得由于某个子问题使用了遗留的类、方法或组件,因此当这个子问题运行的时候应该限制并发代码,那么应该在设计文档中将这个问题阐述清楚。一旦开始使用并行化代码,很容易与其他既有的类、方法和组件进行协作,而那些类、方法和组件很可能会产生不必要的副作用,因为它们在设计的时候并没有考虑并发执行。