之所以在计算机中加入操作系统来实现多个程序的同时运行, 主要基于:

  • 资源利用率, 程序等待的同时可以运行其他程序能提高资源利用率
  • 公平性, 不同用户以及程序对计算机资源有着同等使用权, 通过粗力度的时间分片来共享资源更公平
  • 便利性, 编写多个程序, 每个程序执行一个任务并在必要时通信, 比编写一个程序完成所有任务更便利

多线程优势

  • 多线程程序可以同时在多个处理器上执行, 因此可以提高处理器资源的利用率, 从而提高系统吞吐率
  • 通过使用线程可以将复杂异步的工作流分解为一组简单且同步的工作流, 并在特定的位置进行交互
  • 可以为每一个客户端分配一个线程, 简化异步事件的处理, 不用使用复杂的nio
  • 现代GUI框架, 会独立出一个事件分发线程, 以给予用户更加灵敏的响应

多线程的问题

  • 安全性问题(“永远不发生糟糕的事情”), 多线程之间的交替操作可能带来不可预料的结果
  • 活跃性问题(“某件正确的事情最终会发生”), 多线程可能导致无限循环, 如死锁, 饥饿, 活锁等
  • 性能问题(“正确的事情最终会发生, 但却不够好, 我们通常希望尽快发生”), 多线程可能导致CPU时间更多的花在线程调度而不是线程运行上, 且同步机制会抑制编译器优化, 使内存缓存区中的数据无效, 且更加共享内存总线的同步流量