c# 高级编程 21章458页 【任务和并行编程】【概述】

102 阅读2分钟

使用多线程的 原因

  • 对于需要等待的操作,例如:文件、数据库、网络访问。启动一个新线程,与此同时,可以去完成其他事情。
  • 对于处理密集型的操作,使用多线程也有帮助。一个进程的多个线程可以同时运行在:
    • 不同的CPU上
    • 多核CPU的不同内核上

使用多线程的 注意事项

为避免同步问题,最好不要在线程之间共享数据。当然,这并不总是可行。

  • 如果线程访问相同的数据,就必须实现同步机制

如果需要共享数据,就必须使用同步技术,确保一次只有一个线程访问和改变共享状态

  • 注意避免:条件争用和死锁

如果CPU核心比较多,错误数量就会增加

尽可能的使用不可变的类型,可能部分地避免同步问题。不可变类型,无需同步。

任务

.NET 提供了线程的抽象机制:任务

  • 允许建立:
    • 任务之间的关系。例如:任务的下一个任务
    • 一个层次结构,其中包含多个任务

Parallel类

除了使用任务,还可以使用Parallel类 实现并行活动

并行

数据并行:在不同的任务之间同时处理一些数据

任务并行: 同时执行不同的功能

选择什么技术 实现并行

  • Parallel类提供了非常简单的并行性
  • 如果需要更多的控制,就要使用任务Task。例如:
    • 管理任务之间的关系
    • 定义返回任务的方法
  • 数据流库,用于通过管道传送数据

Parallel LINQ

Parallel LINQ 提供了任务并行的一种变体

同步选项之一:同步对象

同步对象,可以用来:

  • 在一个进程中或跨进程,
  • 同步一个任务或多个任务,
  • 来访问一个或多个资源 也可以用来:
  • 通知完成的任务