我在某处读到,Linux 线程实际上是作为内核中的进程实现的,因为在当今的硬件和 Linux 平台上,线程模型与进程模型相比效率较低。如果是这样的话,为什么我们仍然在项目中使用 pthreads 编程(除了向后兼容)?为什么在 Linux 中弃用 pthreads 模型如此犹豫?
答案1
从您提出的问题来看,您可能还没有看到问题所在线程数提供优于标准流程的优势。
存在诸如高频交易之类的问题,例如,系统对系统中上下文切换的数量以及从用户模式到内核模式的切换非常敏感。在这种情况下,在单个内存空间内工作并具有轻上下文切换或根本没有上下文切换的能力足以使性能提高到足以担心它。此外,如果您有多个进程处理传入的数据流,您不希望实现将数据复制到可用进程的调度程序,因为您必须在共享内存中创建队列或使用基于网络的 IPC 将数据复制到可用进程。各种进程的内存空间,而使用线程,您可以读取并解析一次数据,并将其保存在内部,任何线程都可以根据需要访问该特定事件,从而使执行速度更快。
此外,有些任务可以在不同时间或同时操作相同的数据,在这种情况下,确保您不会践踏来自不同更新进程(线程)的更新变得更加容易。
考虑到这些以及更多的问题(其中单个进程空间变得有利),您可以看到线程的必要性。现在就 Pthread 而言。您不必使用它们,但它们提供标准化,从而提供源代码跨平台的可移植性。
编辑
原来的问题似乎提到了Linux线程它完全在用户级别和内核级别实现线程,必须将其作为进程进行处理,因为这些是唯一可用的内核可调度实体。 从 2.6 内核开始,情况不再如此。 NPTL在内核级别将线程实现为可调度实体。
您还可以查看类似的问题堆栈溢出