有些程序员可能会在r e c v中使用M S G _ P E E K标志,或者调用i o c t l s o c k e t (设置F I O N R E A D选项),
在系统的缓冲区中,事先“偷看”是否存在足够的字节数量。然而,在不实际读入数据的前
提下,仅仅“偷看”数据(如实际读入数据,便会将其从系统缓冲区中将其删除),可不是一
件光彩的事情。我们认为,这是一种非常不好的编程习惯,应尽全力避免。在“偷看”的时
候,对系统造成的开销是极大的,因为仅仅为了检查有多少个字节可用,便发出一个或者更
多的系统调用。以后,理所当然地,还需要牵涉到进行实际r e c v调用,将数据从系统缓冲区
内删除的开销。那么,如何避免这一情况呢?在此,我们的目标是防止由于数据的缺乏(这
可能是网络出了故障,也可能是客户机出了问题),造成应用程序完全陷于“凝固”状态,同
时不必连续性地检视系统网络缓冲!为达此目的,一个办法是将应用程序划分为一个读线程,
以及一个计算线程。两个线程都共享同一个数据缓冲区。