关于socket的多线程操作。

无意间想到的问题,随便记下,免得以后忘了。。

就是一般多线程操作socket是线程安全的,但是很显然,会导致数据包错乱。

悲剧的是,我的netway虽然是用线程池操作消息队列。但是我在消息里指定发送端套接字,如果某2个消息包含同样的目的套接字,而恰好这2个消息又同时被处理,那肯定就数据错误了。。

现在想想,如果非要多线程处理同一个套接字:

对于recv,可以对接收的数据块编号,最后按序排列能保证数据不会错乱。

但是对于send,无论如何不能保证底层套接口按序发送,所以肯定发包错乱。

但是,不要混淆了,一个服务器里,一个客户端对应一个套接字,所以多线程下只要保证不会有套接字访问冲突,那还是很高效的。

剩下的问题就是怎样设计数据结构来保证即是多线程,又没有套接字冲突,还有线程间的切换代价是否值得?

你可能感兴趣的:(关于socket的多线程操作。)