【问题标题】:socket.connect() blocks other threads?socket.connect() 阻塞其他线程?
【发布时间】:2013-07-11 03:37:16
【问题描述】:

如果我在不同线程中发出多个 socket.connect() - 单个 socket.connect() 是否会使当前线程等待 ACK 响应,或者同时另一个线程将能够发出 socket.connect() ?

【问题讨论】:

    标签: multithreading python-2.6 asyncsocket


    【解决方案1】:

    “当前线程等待 ACK”和“另一个线程将能够连接”这两个选项并不相互排斥。两者都是真实的。这就是线程可以继续而另一个被阻塞的全部意义。

    【讨论】:

    • 是的,但我更喜欢带有socket.connect() 调用的线程不会在等待 ACK 时浪费 CPU 时间。我认为需要基于事件的套接字类。 select() 在使用 connect() 时不是事件驱动的,所以不太好
    • 当线程被阻塞等待 ACK 时,调度器不会给它任何时间片。在某个时刻,从网络接收到 ACK,通过 TCP 堆栈,然后再次解除阻塞线程。不会浪费 CPU 周期。
    • +1 - @UlrichEckhardt 是对的 - 没有浪费任何周期,连接将并行运行。
    猜你喜欢
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 2014-04-03
    • 2012-11-08
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多