与网络/IO 绑定应用程序的进程相比,在 Linux 上工作时线程限制是什么?

2024-11-08 09:04:00
admin
原创
190
摘要:问题描述:我听说在多核服务器上的 Linux 下,如果只有 1 个进程但有多个线程,就不可能达到最佳性能,因为 Linux 对 IO 有一些限制,因此 8 核服务器上 8 个线程的 1 个进程可能比 8 个进程慢。有什么意见吗?还有其他限制可能会减慢应用程序的速度吗?该应用程序是一个网络 C++ 应用程序,为...

问题描述:

我听说在多核服务器上的 Linux 下,如果只有 1 个进程但有多个线程,就不可能达到最佳性能,因为 Linux 对 IO 有一些限制,因此 8 核服务器上 8 个线程的 1 个进程可能比 8 个进程慢。

有什么意见吗?还有其他限制可能会减慢应用程序的速度吗?该应用程序是一个网络 C++ 应用程序,为数百个客户端提供服务,并有一些磁盘 IO。

更新:除了我自己实现的锁定之外,我担心还有一些与 IO 相关的问题...在多个线程中同时进行网络/磁盘 IO 是否存在问题?


解决方案 1:

线程的缺点

主题:

  • 序列化内存操作。这是内核,而 MMU 必须为诸如mmap()执行页面分配之类的操作提供服务。

  • 共享相同的文件描述符表。在更改和查找此表时需要锁定,此表存储文件偏移量和其他标志等内容。使用此表进行的每个系统调用(例如open()accept()fcntl()都必须锁定它以转换fd为内部文件句柄,并在进行更改时锁定它。

  • 分享一些调度属性。不断评估进程以确定它们对系统施加的负载,并据此进行调度。大量线程意味着更高的 CPU 负载,这是调度程序通常不喜欢的,并且会增加该进程对事件的响应时间(例如读取套接字上的传入数据)。

  • 可能会共享一些可写内存。任何由多个线程写入的内存(如果需要花哨的锁定,速度会特别慢)都会产生各种缓存争用和传输问题。例如,堆操作(如malloc()和)free()对全局数据结构进行操作(在某种程度上可以解决这个问题)。还有其他全局结构。

  • 共享凭证,这对于服务类型流程来说可能是一个问题。

  • 共享信号处理,这些将在处理时中断整个过程。

进程还是线程?

  • 如果您想使调试更容易,请使用线程。

  • 如果您使用的是 Windows,请使用线程。(在 Windows 中,进程是极其重量级的)。

  • 如果稳定性是主要问题,请尝试使用流程。(SIGSEGV/PIPE只需一个流程...)。

  • 如果没有线程可用,则使用进程。(现在不太常见,但确实发生过)。

  • 如果您的线程共享无法由多个进程使用的资源,请使用线程。(或者提供 IPC 机制以允许与资源的“所有者”线程进行通信)。

  • 如果您使用的资源仅在每个进程一个的基础上可用(并且每个上下文一个),显然请使用进程。

  • 如果您的处理上下文完全不共享任何内容(例如,产生连接但又忘记连接的套接字服务器accept()),并且 CPU 是瓶颈,请使用进程和单线程运行时(不存在诸如堆和其他地方的各种强烈锁定)。

  • 线程和进程之间最大的区别之一是:线程使用软件结构来保护数据结构,而进程使用硬件(速度明显更快)。

链接

  • pthreads(7)

  • 关于进程和线程 (MSDN)

  • 线程与进程

解决方案 2:

这确实应该没有什么区别,但可能与设计有关。

多进程应用程序可能需要执行较少的锁定,但可能会使用更多内存。进程间共享数据可能更加困难。

另一方面,多进程可以更加健壮。您可以调用 exit() 并安全地退出子进程,而不会影响其他进程。

这取决于客户端的依赖程度。我通常推荐最简单的解决方案。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用