C语言多线程编程如何实现长尾词的实时查询与处理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4160个文字,预计阅读时间需要17分钟。
现代CPU通常由多个内核组成,可以同时执行多重指令,以此加快程序的整体执行速度。多线程应用的主要优势在于同时利用多个内核,实现线程间的内存共享同步。
现代 CPU 一般由多个内核组成,可以同时执行多重指令,以加快程序的整体执行速度。多线程应用程序得以实现的首要原因,就是同时利用了多个内核,实现线程之间的共享内存同步。如果线程之间不需要共享状态,那么最好采用不同的输入,运行同一程序的多个实例,作为不同的进程。
多线程应用程序并非总能加快程序运行速度。在分析要求之前,就预先进行优化,并实现多线程,这种做法其实是错误的。多线程编程的编写和调试往往更复杂。线程通过访问共享内存来进行协调和“通信”,因此在没有适当同步的情况下,可能会出现数据竞争(官方定义见下文),进而可能导致程序崩溃。
例如,假设在非 CPU 密集型程序中,进程速度变慢并非因 CPU 所致——这个问题并不是我们需要消除的瓶颈。在这种情况下,升级 CPU 或添加其他线程来分担计算工作,并不会提高吞吐量。
不过,也有许多程序可以从多线程运行中获益。例如,当我们遇到 I/O 阻塞,导致应用程序速度变慢时,新增一个处理 I/O 的线程,就可以加快进程。有些应用程序必须使用多线程。比如,现代操作系统往往需要同时访问多个资源。关于应用程序何时需要多线程,何时不需要多线程的精彩讨论,请观看 Ansel Sermersheim 在 CppCon 2017 上的演讲:“多线程是答案,那么什么是问题?”
本文将讨论采用现代 C++ 语言的多线程编程。首先介绍多线程编程的基础,然后再深入分析若干主题,包括无等待和无锁数据结构和算法等。
C++11 之前
C++ 大约于 1985 年问世,但直到 C++11,其标准规范内才出现线程的概念。
本文共计4160个文字,预计阅读时间需要17分钟。
现代CPU通常由多个内核组成,可以同时执行多重指令,以此加快程序的整体执行速度。多线程应用的主要优势在于同时利用多个内核,实现线程间的内存共享同步。
现代 CPU 一般由多个内核组成,可以同时执行多重指令,以加快程序的整体执行速度。多线程应用程序得以实现的首要原因,就是同时利用了多个内核,实现线程之间的共享内存同步。如果线程之间不需要共享状态,那么最好采用不同的输入,运行同一程序的多个实例,作为不同的进程。
多线程应用程序并非总能加快程序运行速度。在分析要求之前,就预先进行优化,并实现多线程,这种做法其实是错误的。多线程编程的编写和调试往往更复杂。线程通过访问共享内存来进行协调和“通信”,因此在没有适当同步的情况下,可能会出现数据竞争(官方定义见下文),进而可能导致程序崩溃。
例如,假设在非 CPU 密集型程序中,进程速度变慢并非因 CPU 所致——这个问题并不是我们需要消除的瓶颈。在这种情况下,升级 CPU 或添加其他线程来分担计算工作,并不会提高吞吐量。
不过,也有许多程序可以从多线程运行中获益。例如,当我们遇到 I/O 阻塞,导致应用程序速度变慢时,新增一个处理 I/O 的线程,就可以加快进程。有些应用程序必须使用多线程。比如,现代操作系统往往需要同时访问多个资源。关于应用程序何时需要多线程,何时不需要多线程的精彩讨论,请观看 Ansel Sermersheim 在 CppCon 2017 上的演讲:“多线程是答案,那么什么是问题?”
本文将讨论采用现代 C++ 语言的多线程编程。首先介绍多线程编程的基础,然后再深入分析若干主题,包括无等待和无锁数据结构和算法等。
C++11 之前
C++ 大约于 1985 年问世,但直到 C++11,其标准规范内才出现线程的概念。

