当前位置: 首页 > 面试题库 >

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

梁嘉澍
2023-03-14
问题内容

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

任何意见?还有其他限制可能会使应用程序变慢吗?这些应用程序是一个网络C ++应用程序,可为数百个客户端提供服务,并带有一些磁盘IO。

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


问题答案:

线程的缺点

线程数:

  • 序列化内存操作。那就是内核,因此MMU必须服务于诸如mmap()执行页面分配之类的操作。
  • 共享相同的文件描述符表。该表中涉及锁定,包括更改和执行查找,该表存储诸如文件偏移量和其他标志之类的内容。使用该表进行的每个系统调用(例如open()accept())都fcntl()必须将其锁定以转换fd为内部文件句柄以及进行更改。
  • 共享一些调度属性。不断评估流程以确定它们施加在系统上的负载,并据此计划。大量线程意味着更高的CPU负载,而调度程序通常不喜欢这样做,这会增加对该进程事件的响应时间(例如,读取套接字上的传入数据)。
  • 可能共享一些可写的内存。由多个线程写入的任何内存(如果需要花式锁定,则特别慢),将生成各种缓存争用和处理问题。例如堆操作,例如malloc()free()在全局数据结构上操作(可以在某种程度上解决)。还有其他全球结构。
  • 共享凭据,这可能是服务类型流程的问题。
  • 共享信号处理,这些将在处理信号时中断整个过程。

进程还是线程?

  • 如果要简化调试,请使用线程。
  • 如果您使用的是Windows,请使用线程。(在Windows中,进程非常重要)。
  • 如果稳定性是一个很大的问题,请尝试使用过程。(SIGSEGV/PIPE仅此而已…)。
  • 如果线程不可用,请使用进程。(现在还不那么普遍,但是确实发生了)。
  • 如果您的线程共享无法在多个进程中使用的资源,请使用线程。(或提供IPC机制以允许与资源的“所有者”线程进行通信)。
  • 如果您使用的资源仅基于每个进程一个(而每个上下文仅一个),那么显然使用进程。
  • 如果您的处理上下文绝对不共享任何内容(例如,套接字服务器在生成连接时就产生并忘记了连接accept()),而CPU是瓶颈,则请使用进程和单线程运行时(这些运行时应避免进行各种密集锁定,例如on)。堆和其他地方)。
  • 线程和进程之间最大的区别之一是:线程使用软件构造来保护数据结构,进程使用硬件(速度 明显 更快)。

链接

  • pthreads(7)
  • 关于进程和线程(MSDN)
  • 线程与进程


 类似资料:
  • 我对Java FX应用程序线程有问题。下面是一个伪代码: 问题是睡眠发生在窗口中,该窗口显示在show Menu()中,show LoadingPic()根本没有显示,而在最后窗口中显示的是show Map()。 show LoadingPic中的场景有一个进度条,运行2秒,与Thread.sleep(2000)相同。 因此,似乎javafx应用程序线程块show LoadingPic()和sho

  • 本文向大家介绍Linux中进程和线程的对比与区别,包括了Linux中进程和线程的对比与区别的使用技巧和注意事项,需要的朋友参考一下 Linux中进程和线程的对比与区别 1.概念 进程:正在运行中的程序。 线程:进程中的一条执行路径。 2.区别 (1)通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和

  • 我想用javascript(网络技术)编程一个桌面应用程序,并寻找电子和Chrome应用程序之间的比较。 我所需要的一切似乎都可以通过Chrome应用程序实现,但围绕Electron/NW有一个很大的宣传。js。电子的优点是什么?这是由于大量的节点包造成的吗? 我认为功能差异对我来说很清楚。 赞成和反对意见如下: 正如爱德华多所指出的,谷歌宣布将停止ChromeOS以外所有平台的Chrome应用。

  • 问题内容: 在Linux中,我想运行一个程序,但只能运行有限的时间,例如1秒。如果程序超出此运行时间,我想终止进程并显示错误消息。 问题答案: StackOverflow不允许我删除答案,因为它已被接受。由于它在列表顶部,下面有一个更好的解决方案,因此它获得了否决票。如果您使用的是GNU系统,请按照@wRAR的建议使用代替。因此,希望您停止投票,这是它的工作方式: 您可以使用,,或为秒(如果省略默

  • 问题内容: 我在使用Java 1.6(1.6.0_02或1.6.0_04)运行Red Hat Linux(内核版本为2.4.21-37.ELsmp)的测试计算机上遇到问题。问题是,一旦在单个线程组中创建了一定数量的线程,操作系统将不愿意或无法创建更多线程。 这似乎是特定于Java创建线程的,因为C线程限制程序能够创建约1.5k线程。此外,Java 1.4 JVM不会发生这种情况……它可以创建超过1

  • 本文向大家介绍Web Worker线程的限制是什么?相关面试题,主要包含被问及Web Worker线程的限制是什么?时的应答技巧和注意事项,需要的朋友参考一下 (1)同源限制 分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。 (2)DOM 限制 Worker 线程所在的全局对象,与主线程不一样,无法读取主线程所在网页的 DOM 对象,也无法使用document、window、