和进程相比,系统在创建和管理线程时的开销要小的多,这里通过比较调用fork()创建进程和pthread_create()创建线程时的耗时开销来说明。下表中的耗时为执行了50000次创建操作对应的耗时,单位为秒。
注意:由于是在具有多核的对称系统上运行,不要期望系统空间耗时和用户空间耗时相加等于实际耗时,这个耗时数据充其量只是一份近似测量的结果。
在支持高性能计算的平台上使用Pthreads可以实现性能的最优化,特别是当一个应用使用MPI进行进程间通信时,此时使用Pthreads代替MPI一般可以获得更高的性能。
MPI库一般通过共享内存实现进程间的通信,其中会包含至少一次的内存拷贝操作。而使用Pthreads时由于线程之间共享属于进程的资源,其中不存在数据拷贝,至多是一个指向数据的指针的传递。
最坏的情况下,使用Pthreads编程时可能会遇到缓存到CPU或者内存到CPU的带宽问题,但整体来说其速度仍然要比通过共享内存通信的MPI要快不少。
使用多线程的应用程序相比不使用多线程的应用程序除了性能有所提升外,还具有如下优势:
一个典型案例就是web浏览器,包含很多并行运行着的优先级不同的任务。另外现代操作系统中都会使用多线程技术,下图是Windows中任务管理器的截图,可以看到其中一些进程都包含了若干子线程。