gpt4 book ai didi

将选择与线程与 TCP C 程序相结合

转载 作者:可可西里 更新时间:2023-11-01 02:52:46 26 4
gpt4 key购买 nike

我很困惑:是否可以/建议合并线程并在 fd 上进行选择?例如:我想制作一个线程 tcp 客户端-服务器程序,客户端可以向服务器发送消息,服务器将消息传播给所有连接的客户端(并且客户端可以继续通信)。

我制作了一个服务器-客户端程序,其中所有客户端在连接时都有一个单独的线程;但我在 beej 指南中读到“如果你在 accept() 调用上阻塞怎么办?你将如何同时接收 recv() 数据?”“使用非阻塞套接字!”不行!你不想成为 CPU pig 。然后呢?”

在这种情况下,我不明白阻塞意味着什么;因为在我的程序中,当我输入文本并按下输入时,文本已发送到服务器,但为什么他的意思是同时接收数据?当我输入文字时?这怎么可能?我想我很困惑:p我认为这些是处理程序的完全不同的方式,但我又没有看到 select 提供的优势?谢谢

最佳答案

当然可以使用调用select 的多个线程,但不是必需的。服务器可以只用一个线程为所有客户端提供服务。如何?一次一个。 select 函数(及其替代品,例如 pollepoll 等)可以在其中一个套接字上发生事件时通知您从你提供的那套。 select 还会在监听套接字可以接受 时通知您。因此服务器可以只有一个事件循环来处理监听和连接的套接字。

至于有什么优缺点,我直接给你链接The C10K problem文章。这是一个相当古老的争论。

关于将选择与线程与 TCP C 程序相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10745561/

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