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

2024-11-08 09:04:00
admin
原创
28
摘要:问题描述:我听说在多核服务器上的 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() 并安全地退出子进程,而不会影响其他进程。

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

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用