读书笔记《C++并发编程实战》(1)

何为并发:
    两个或者多个独立活动同时发生,对于单核心的任务切换也认为是并发。
    目前真正有意义的是硬件并发,对于多核心多线程的任务,并发程度取决于可用的硬件并发。
    任务切换存在一定的上下文切换开销,以保存当前CPU状态、PC、指令等,
    同样的切换回另个任务时需要重新加载早期的处理状态、内存载入缓存等。
    另外并发和并行也存在一定的差异。
    
并发方式:
    多进程并发:进程间独立执行任务,且通过进程间通信传递信息。
        优点:相对独立,占用各自独立的空间,相对安全。此外通过网络
           通信的方式实现进程间通信,有时可提高并行可用性和性能、扩展能力。
        缺点:进程启动开销比较大、且占用更多的系统资源、相互间通信比较复杂或者比较慢。
    多线程并发:单个进程内部执行多个线程,线程间可共享进程的地址空间。
    
为何使用并发:
    关注点分离:分离不同的设计实现、任务的逻辑或功能,以清晰设计或响应等,如GUI开发等。
    性能:利用多核心的能力,提高并发能力,如任务划分以并发执行节省时间开销。
    任务划分过程中可能出现任务并行、数据并行两个层次。数据并行需要精心设计可并行处理的数据。

为何不使用并发:
    收益比不上成本时。如并发的复杂性、可维护性、整体并发执行后的效果、启动线程和管理线程、线程切换的开销等。
    
C++11的线程库
    不同平台下的多线程实现(系统API)存在一定的不同很多时候使用系统级别的工具实现并发,
    C++11的线程库,因抽象不同平台会额外执行一些代码,故而会存在一定的性能影响;
    除非特殊情况,C++11标准线程库的实现已足够好,否则才使用特定于平台的低级的工具。
    另外C++11线程可以和相应不同平台的API工具结合使用(C++11的nativa_handle)。
原文地址:https://www.cnblogs.com/haomiao/p/11647376.html