gpt4 book ai didi

sockets - 如何使用单线程在 TCP 上实现全双工 channel ?

转载 作者:可可西里 更新时间:2023-11-01 02:33:53 25 4
gpt4 key购买 nike

我正在编写的网络库需要通过 TCP 套接字发送和接收消息。消息可以随时发送或接收,即应该作为全双工 channel 工作。

我能够使用两个线程实现这样的场景:调用 send() 的主线程和一个主要在 recv() 调用时阻塞的专用线程。

我的问题是:是否可以用单线程实现同样的场景? IE。通过注册一些回调函数?

附带说明:我需要用 C++、Java 和 Python 实现这个场景。

最佳答案

是的,有可能。您需要使用允许多路复用 I/O 的 API。在 C/C++ 和 Python 下,您可以使用 select() 和非阻塞 I/O,因此您唯一阻塞的网络调用是 select()。还有 poll() 和 epoll() 以及许多其他类似的 API,它们完成同样的事情,具有不同程度的效率和可移植性。 Java 有 non-blocking I/O APIs还有。

另一种可能性是使用异步 I/O,您告诉操作系统开始一个 I/O 事务,它会在操作完成时通知您(通过某种机制)。但是,我不熟悉这种网络编程风格,因此我不会尝试提供详细信息。

关于sockets - 如何使用单线程在 TCP 上实现全双工 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675824/

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