- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的应用程序中有 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/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!