栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

线程的缺点

线程数:

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

进程还是线程?

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

链接

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408684.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号