• 2.3 为何使用Pthreads


    轻量

            和进程相比,系统在创建和管理线程时的开销要小的多,这里通过比较调用fork()创建进程和pthread_create()创建线程时的耗时开销来说明。下表中的耗时为执行了50000次创建操作对应的耗时,单位为秒。

            注意:由于是在具有多核的对称系统上运行,不要期望系统空间耗时和用户空间耗时相加等于实际耗时,这个耗时数据充其量只是一份近似测量的结果。

    高效的通信/数据交换

            在支持高性能计算的平台上使用Pthreads可以实现性能的最优化,特别是当一个应用使用MPI进行进程间通信时,此时使用Pthreads代替MPI一般可以获得更高的性能。

            MPI库一般通过共享内存实现进程间的通信,其中会包含至少一次的内存拷贝操作。而使用Pthreads时由于线程之间共享属于进程的资源,其中不存在数据拷贝,至多是一个指向数据的指针的传递。

            最坏的情况下,使用Pthreads编程时可能会遇到缓存到CPU或者内存到CPU的带宽问题,但整体来说其速度仍然要比通过共享内存通信的MPI要快不少。

    其他原因

            使用多线程的应用程序相比不使用多线程的应用程序除了性能有所提升外,还具有如下优势:

    • CPU可以与I/O操作同步进行;譬如一个应用程序中可能存在时间较长的I/O操作,此时一个线程可以等待该操作完成,而其他线程可以使用CPU继续执行相关任务,从而不被阻塞。
    • 优先级/实时调度;更重要的任务可以被调度使其取代或打断低优先级的任务
    • 异步事件处理:为不确定频率和耗时的事件提供服务的任务可以交错进行,譬如一个服务器可以一边按照前面接收到的请求传输数据,一边处理刚接收到的其他请求。

            一个典型案例就是web浏览器,包含很多并行运行着的优先级不同的任务。另外现代操作系统中都会使用多线程技术,下图是Windows中任务管理器的截图,可以看到其中一些进程都包含了若干子线程。

  • 相关阅读:
    当我们对组件二次封装时我们在封装什么
    Java面试题之 mysql面试题
    Flink的Checkpoint
    进制的转换 如六进制
    【简单的留言墙】HTML+CSS+JavaScript
    H264码流中SPS PPS详解
    算法笔记-第五章-大整数运算
    假如我有一台服务器,我会让它提供三种服务
    论文翻译:2020_Lightweight Online Noise Reduction on Embedded Devices using Hierarchical Recurrent Neural Networks
    网页设计期末课程设计大作业 HTML、CSS 海绵宝宝动漫网页作业
  • 原文地址:https://blog.csdn.net/lwx309025167/article/details/133755509