我正在编写的网络库需要通过 TCP 套接字发送和接收消息。消息可以随时发送或接收,即应该作为全双工通道工作。
我能够使用两个线程来实现这样的场景:调用 send() 的主线程和一个主要在 receive() 调用处阻塞的专用线程。
我的问题是:是否可以用单线程实现相同的场景? IE。通过注册一些回调函数?
附带说明:我需要用 C++、Java 和 Python 实现这个场景。
是的,有可能。您需要使用允许多路复用 I/O 的 API。在 C/C++ 和 Python 下,您可以使用 select() 和非阻塞 I/O,因此您阻塞的唯一网络调用就是 select()。还有 poll() 和 epoll() 以及许多其他类似的 API 可以完成相同的任务,但效率和可移植性程度不同。 Java有非阻塞 I/O API http://www.owlmountain.com/tutorials/NonBlockingIo.htm#_Toc524339522 also.
另一种可能性是使用异步 I/O,您告诉操作系统启动 I/O 事务,并在完成操作时通知您(通过某种机制)。不过,我不熟悉这种网络编程风格,因此我不会尝试提供详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)