辩证

多线程不一定比串行执行快,需要考虑线程创建和上下文切换的损失。

减少上下文切换

  • 无锁并发编程,如使用 Hash 算法将数据分段,供不同线程处理。
  • CAS 算法。
  • 使用尽可能少的线程,避免创建过多线程导致大多处于等待态。
  • 协程,在单线程里实现多任务调度,并维持多任务间切换。

资源限制问题

  • 硬件资源限制,考虑集群并行执行程序。
  • 软件资源限制,考虑资源池复用资源,如使用连接池复用数据库连接。