QLocalSocket和QTcpSocket混用,会影响QTcpSocket的性能吗?

Qt的LocalSocket是基于PIPE实现的,且PIPE的缓冲区被设置为0。

为什么被设置为0呢?它文档说是数据在管道没有被关闭前取出,会导致数据丢失,故在创建时设置其缓冲区为0。那它是如何优化性能呢?它是利用OVERLAPPED_COMPLETION_ROUTINE的能力实现的。无限异步调用ReadFileEx(PIPE),当数据到达缓冲区后,取回数据又再调用,从而实现数据的快速读取。写入数据呢?也是相似的方法。

那它与QTcpSocket混用是否会影响性能吗?在实际P2P模式压测试下,PIPE的传输效率为每秒5M字节左右,QTcpSocket为14M字节,这压测是在发送1M数据回复一个ACK然后再发送1M数据下取得的结果。

QTcpSocket虽效率高,但占用CPU也相应高,QLocalSocket虽然是低很多,但CPU占用低。
在实际的复杂的网络环境下,其也满足使用。