gpt4 book ai didi

python - 为什么当套接字变得可读时,10 个选择过程中只有 2 个被通知?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:09 24 4
gpt4 key购买 nike

在我的应用程序中有 10 个进程共享一个套接字。

他们都在使用 select 等待它变得可读。

但我在应用程序日志中注意到,每当套接字变得可读时,这 10 个进程中只有 2

可能是什么原因?

最佳答案

怀疑发生的事情是第一个进程正在醒来,从 select() 返回,并在后续上下文切换到其他进程之前调用 accept()。

我不确定 select() 实际上阻塞了什么或者它是如何唤醒的。我怀疑当它确实从等待中醒来时,它会重新检查队列以查看数据是否仍然可用。如果没有,则返回等待。

我也会加倍验证我的假设。 2 个进程正在唤醒这一事实表明您拥有双核处理器。如果您有四核,您可能会看到多达 4 个进程同时唤醒。

证明这个理论的一个简单方法:在调用 accept() 之前放置一个 2 秒的 sleep() 调用。我怀疑您会看到所有 10 个进程都唤醒并记录调用接受的尝试。

如果您的目标是让 N 个进程(或线程)为传入连接提供服务,您的方法可能仍然不错。您可能会从在非阻塞套接字上执行 select() 调用切换到仅使用直接调用 accept() 的阻塞套接字。当传入连接进入时,其中一个进程将从 accept() 返回一个有效的客户端套接字句柄。其他人仍将被阻止。

关于python - 为什么当套接字变得可读时,10 个选择过程中只有 2 个被通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20878718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com