并行编程代码的实现方式取决于所使用的编程语言和可用的库。以下是几种常见的并行编程方法:
多进程编程
使用多进程库(如Python的`multiprocessing`包)来创建多个进程,每个进程可以独立执行任务。这种方法适用于CPU密集型任务,可以充分利用多核处理器的优势。
```python
from multiprocessing import Pool
import time
def long_task(n):
time.sleep(1)
return n * n
def parallel_run():
start = time.time()
with Pool() as p:
result = p.map(long_task, range(10))
print(f"并行方式耗时:{time.time() - start:.2f}秒")
return result
if __name__ == '__main__':
parallel_run()
```
多线程编程
使用多线程库(如C++的`
```cpp
include include void do_something() { std::cout << "Hello from thread" << std::endl; } int main() { std::thread my_thread(do_something); my_thread.join(); return 0; } ``` 使用任务并行库(如C的`Task Parallel Library`)来创建和管理任务。TPL提供了高级的并行编程功能,如任务的并行执行、异常处理和结果聚合。 ```csharp using System; using System.Linq; using System.Threading.Tasks; class Program { static async Task Main() { var data = Enumerable.Range(1, 1000000).ToArray(); var watch = new Stopwatch(); watch.Start(); var linqResult = data.AsParallel().Where(n => n % 2 == 0).ToArray(); watch.Stop(); Console.WriteLine($"Parallel LINQ耗时: {watch.ElapsedMilliseconds}ms"); } } ``` 使用OpenMP指令集来编写并行代码。OpenMP是一个支持多平台共享内存并行编程的API,适用于C/C++等语言。 ```c include include include void Hello() { int my_rank = omp_get_thread_num(); int thread_count = omp_get_num_threads(); printf("Hello World from thread %d of %d ", my_rank, thread_count); } int main(int argc, char* argv[]) { omp_set_dynamic(0); omp_set_nested(1); pragma omp parallel { Hello(); } return 0; } ``` 使用MapReduce编程模型来处理大数据集。MapReduce通常用于分布式系统,将任务分解为映射(Map)和归约(Reduce)两个步骤。 ```csharp using System.Linq; public static ParallelQuery MapReduce(this ParallelQuery source, Func return source.SelectMany(map) .GroupBy(keySelector) .SelectMany(g => g.Select(reduce)); } private static void RunMapReduce() { var data = Enumerable.Range(1, 1000000).ToArray(); var result = data.AsParallel().MapReduce( map: x => x * x, keySelector: x => x, reduce: (key, values) => values.Sum() ); Console.WriteLine($"Result: {result}"); } ``` 选择合适的并行编程方法需要根据具体的应用场景和需求来决定。多进程和多线程适用于CPU和I/O密集型任务,而TPL和OpenMP则提供了更高级的并行编程功能。MapReduce则适用于处理大规模数据集。并行任务库(TPL)
OpenMP
MapReduce