Socket套接字在多线程发送数据时要加锁吗

Socket套接字在多线程发送数据时要加锁吗

1)对于 UDP,多线程读写同一个 socket 不用加锁,不过更好的做法是每个线程有自己的 socket,避免 contention,可以用 SO_REUSEPORT 来实现这一点;
2)对于 TCP,通常多线程读写同一个 socket 是错误的设计,因为有 short write 的可能。假如你加锁,而又发生 short write,你是不是要一直等到整条消息发送完才解锁(无论阻塞IO还是非阻塞IO);
3) 总结:对于 UDP,加锁是多余的;对于 TCP,加锁是错误的

猜你喜欢

转载自blog.csdn.net/QIJINGBO123/article/details/88051282
今日推荐