【问题标题】:Performance/priority in Boost thread with accept() (Linux)使用 accept() 的 Boost 线程中的性能/优先级 (Linux)
【发布时间】:2011-10-07 15:59:42
【问题描述】:

我已经实现了一个 C++ 类,它启动一个单独的线程接受连接(使用boost::asio)。整个类旨在成为更大程序的异步“命令接收器”。

主要问题是:在等待传入连接时,线程基本上是空闲的。我的看法是,这是在浪费处理器时间(和硬件线程),什么都不做。有没有什么方法可以执行优先级较低的线程,或者有什么其他方法可以让线程不干扰主程序,既是任务密集型又是线程化的?

【问题讨论】:

    标签: c++ linux multithreading sockets boost


    【解决方案1】:

    如果您或您使用的类正在执行accept 调用,则线程被阻塞并等待操作系统执行某些操作。所以线程(应该)不消耗任何 CPU 资源,如果这样做,它要么是

    • 在系统调用中(您无法更改)或
    • 超时,线程再次循环到accept。如果 有什么参数可以改变这个,试试吧!

    【讨论】:

    • 我认为你是对的。我无法通过 ps 获得任何证据表明威胁正在消耗任何资源。谢谢!
    【解决方案2】:

    假设您使用的是 boost 线程类,您可以通过在 boost 线程中使用 native_handle() 句柄函数来更改线程优先级。 Here 是一个小例子。

    但首先我建议您确认您确实有问题。无论如何,您关心的线程应该实际上是空闲的。

    【讨论】:

    • 与我的其他评论相同:D 谢谢,您建议的代码将用于其他目的。 +1 ;)
    猜你喜欢
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2020-12-19
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多