何为并发: 两个或者多个独立活动同时发生,对于单核心的任务切换也认为是并发。 目前真正有意义的是硬件并发,对于多核心多线程的任务,并发程度取决于可用的硬件并发。 任务切换存在一定的上下文切换开销,以保存当前CPU状态、PC、指令等, 同样的切换回另个任务时需要重新加载早期的处理状态、内存载入缓存等。 另外并发和并行也存在一定的差异。 并发方式: 多进程并发:进程间独立执行任务,且通过进程间通信传递信息。 优点:相对独立,占用各自独立的空间,相对安全。此外通过网络 通信的方式实现进程间通信,有时可提高并行可用性和性能、扩展能力。 缺点:进程启动开销比较大、且占用更多的系统资源、相互间通信比较复杂或者比较慢。 多线程并发:单个进程内部执行多个线程,线程间可共享进程的地址空间。 为何使用并发: 关注点分离:分离不同的设计实现、任务的逻辑或功能,以清晰设计或响应等,如GUI开发等。 性能:利用多核心的能力,提高并发能力,如任务划分以并发执行节省时间开销。 任务划分过程中可能出现任务并行、数据并行两个层次。数据并行需要精心设计可并行处理的数据。 为何不使用并发: 收益比不上成本时。如并发的复杂性、可维护性、整体并发执行后的效果、启动线程和管理线程、线程切换的开销等。 C++11的线程库 不同平台下的多线程实现(系统API)存在一定的不同很多时候使用系统级别的工具实现并发, C++11的线程库,因抽象不同平台会额外执行一些代码,故而会存在一定的性能影响; 除非特殊情况,C++11标准线程库的实现已足够好,否则才使用特定于平台的低级的工具。 另外C++11线程可以和相应不同平台的API工具结合使用(C++11的nativa_handle)。