【问题标题】:how can we tell if the remote server is multi-threaded?我们如何判断远程服务器是否是多线程的?
【发布时间】:2011-01-25 09:50:04
【问题描述】:

我的客户没有向我提供有关其应用性质的详细信息。它可能 是多线程的,它可能不是。他的服务器提供 SOAP 消息(http 请求)

是否有任何特殊技巧可以了解对等方是单线程还是多线程?

我不想询问客户并且我无权访问他的服务器/机器。我想自己去找。

【问题讨论】:

  • 我确实关心请求的顺序和功能的性能。
  • 另外,它可能使用某种连接池..
  • @cateof 是多线程的并不意味着高(或低)性能。在许多情况下,相反的情况可能是正确的。我建议你直接问客户。
  • 它可能是多线程的,也可能不是。将来可能会改变。
  • 即使它是多线程的并且具有高性能,它也可能不是线程安全的。

标签: c++ multithreading network-programming unix


【解决方案1】:

这无关紧要。为什么你觉得这对你很重要?

一个更有用的问题是:

服务器能否接受多个 同时会话?

答案很可能是“是的,当然”,但当然可以实现无法支持多个会话的服务器。

仅仅因为服务器支持多个会话,并不意味着它是多线程的。而且,仅仅因为它是多线程的并不意味着它会有良好的性能。当服务器需要支持数百或数千个会话时,多线程可能是性能非常差的选择。

您问这个问题是因为您想在同一个连接上“重叠”SOAP 消息 - 换句话说,让三个线程发送请求,然后三个线程都等待响应?那是行不通的,因为(像 HTTP 一样)请求和响应消息在每个连接上都配对在一起。您需要打开三个连接才能获得三个重叠的消息。

【讨论】:

  • 感谢您的分析。那么问题是我们如何确定服务器是否可以同时接受多个会话?
  • 尝试一次打开两个连接。如果第二个失败,那么你就会知道。而且,您可以在一个线程中进行此测试。
【解决方案2】:

不幸的是,不,至少在不直接访问计算机的情况下不会。多个连接甚至可以由单个线程管理,但好消息是这不太可能。大多数服务器使用线程池并在握手时将线程分配给连接。有什么特别的原因需要您知道吗?如果您想在此服务器上工作,您将直接了解它的工作原理。

【讨论】:

  • 如果他的实现是单线程的,我也会实现单线程。
  • 目的是什么?你正在编写一个程序来与服务器通信?如果您打算一次使用多个连接,则只需要多个线程,尽管通常这不是必需的。只有服务器需要担心多个连接,而不是客户端。
【解决方案3】:

服务器是否是多线程的并不重要。如果您担心的话,有一些很好且有效的方法可以在没有线程的情况下实现 I/O 多路复用 [例如 select(2) 等]。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多