我们可以在同一个套接字上从一个线程调用发送并从另一个线程调用接收吗?我们可以在同一个套接字上从不同的线程并行调用多个发送吗?我知道一个好的设计应该避免这种情况......
我知道一个好的设计应该避免这种情况,但我不清楚这些系统 API 将如何表现。我找不到关于此问题的良好文档。
任何方向的指示都会有帮助。
POSIX 将 send/recv 定义为原子操作,因此假设您正在谈论 POSIX send/recv,那么是的,您可以从多个线程同时调用它们,并且一切正常。
这并不一定意味着它们将并行执行——在多次发送的情况下,第二个可能会阻塞,直到第一个完成。您可能不会注意到这一点,因为一旦将数据放入套接字缓冲区,发送就会完成。
如果您使用 SOCK_STREAM 套接字,尝试并行执行操作不太可能有用,因为 send/recv 可能只发送或接收消息的一部分,这意味着事情可能会被分裂。
SOCK_STREAM 套接字上的阻塞发送/接收只会阻塞到它们发送或接收至少 1 个字节,因此阻塞和非阻塞之间的差异没有用。