我在使用多线程进行编程,需要给主线程发送数据大约 1K/m(秒)如果建立队列缓冲区队尾进入,主线程在队头删除数据。1、由于线程间频繁交换数据,造成程序缓慢。2、由于队列是由链表组成,是否需要线程同步,如使用线程同步会不会加重程序    任务。3、使用Window消息发送数据不知是否可行。他能否承受如此大的通讯任务。4、网络间通讯的大容量数据是如何处理的。

解决方案 »

  1.   

    windows 消息处理速度也是勉强可以啦。如果用消息传递数据可能会慢
      

  2.   

    最好用SOCKET,这样的话,就不会慢了。
      

  3.   

    对!
    用CSocket传输可以的!稳定性可以@!我试过!
      

  4.   

    设立共享缓冲区是速度最快的,把缓冲区加锁,效率不会降低多少的。特别是在非WIN OS 下面。
      

  5.   

    最简单的方式是设立公有变量或共享缓存区,不必用CSocket.
    不同的线程处理同一个队列或链表是,需要对该链表加锁,如CCriticalSection
    速度不会有问题,我用过的比你复杂的多:很多线程,很多公用变量.
      

  6.   

    win/unix/linux其实都一样,
    要想速度快,就不要绕过太多的弯路,
    一个线程把数据放在内存中,另一个来取,是最快的。
    消息应该和socket一样慢,尤其CSocket是基于消息的。
    内存缓冲区+锁我想是最好最快的,
    不过最好简化共享区操作,使各个线程等待操作
    共享区的时间越小越好。
      

  7.   

    我的建议:
    (一)同一服务器进程间通讯:
        1)采用微软消息队列(Microsoft Message Queue,MSMQ);
        2)采用内存映射文件;
    (二)不同服务器之间数据通讯:
        1)Winsock API;
        2)采用微软消息队列(Microsoft Message Queue,MSMQ);备注:
        1)在采用消息队列的时候,一定要注意是采用内存队列,还是磁盘队列;
        2)基于Winsock API的数据通讯,应用层协议最好采用发送\应答(submit_data\submit_data_resp)机制,且采用异步发送机制。我们做过测试,如果采用内存消息队列(MSMQ),10万条消息(每条长度为500byte)在6秒钟发送完毕。以上来自  stream 的建议
      

  8.   

    TO: zj_zyq(飞鸽) 
    什么叫 内存队列和磁盘队列?
      

  9.   

    在工作线程中通过PostThreadMessage()向主线程发送自定义消息,在主线程中对相应的自定义消息做相应的消息处理。
      

  10.   

    补充:
    强烈建议阅读侯捷的《Win32多线程编程》。