深度探索多线程机制
 小弟,我这有个问题,就是多线程的实现方式的底层机制 
 我举一个问题 
 例如我开这样两个线程 
       Thread[]   infoThread   =   new   Thread[2]; 
             //线程一    
    infoThread[0]   =   new   Thread(new   ThreadStart(SendInfoSocket)); 
 //线程2    
 infoThread[1]   =   new   Thread(new   ThreadStart(SendInfoSocket)); 
                                                 }   
 useSocket-------- 
 public   void   SendInfoSocket{ 
 //   使用一个已经存在连接好的socket 
 //   发送一个信息 
    sendSocket(); 
 //   接收一个从服务器回来的消息 
    receiveSocket(); 
 }   
 main{ 
       infoThread[0].start(); 
       infoThrad[1].start(); 
 } 
 // 
 假设 
 线程1:发送   T1   应该得到答复也是T1 
 线程2:发送   T2   因该得到答复也是T2 
 但是这里的接收会不会乱序???         
------解决方案--------------------怎么都扯到网卡了,这是从物理层到应用层的问题,主要是应用层.我也忘记了,不同进程是肯定不会乱的,线程的还没考虑过.建议楼主看一下计算机网络的课本,应该就很清楚了.   
 另外,和cpu也一点关系都没有.
------解决方案--------------------现在问题的关键是,线程发出的TCP报文上的应用标记(暂且这么叫吧汗),是标记了应用程序信息还是线程信息(实际上是粒度问题),如果是线程信息那就没错了;汗...
------解决方案--------------------首先搞清楚,接受到消息都会把数据放在本地的buff内,自己也可以设置大小。。你的线程recv也只是读取buff上的数据,所以要做好同步控制。 服务器返回消息才不管你是哪个线程发来的,它只管把数据放在那个buff上。。。 
 这里的接收会不会乱序  ? 那是肯定的,因为网络可能有延时,先发出的消息也不一定会比后发出的消息早到服务器。。。。。。。。。。   
 lz可以改用其他i/o模型,比如试试使用 select 模型。 
 如果非要 多线程,那么控制好你的recv函数,, 也可以在自己自己发送的数据上写入自己的线程id ,通过判断接受数据中的 数据来判断是否是该线程发送的。。。。 (效率不好)
------解决方案--------------------我说两句,虽然理论我不是很清楚,但是,我可以明确的告诉你,肯定会乱序,因为我也做了这样一个程序,当线程多了之后,顺序就乱了,我开始也觉得纳闷,感觉应该是一对一的,但实际上根本不是。这时从实践中总结出来的。