利用Window消息进行通讯的效率大讨论(高手请进100分) 我在使用多线程进行编程,需要给主线程发送数据大约 1K/m(秒)如果建立队列缓冲区队尾进入,主线程在队头删除数据。1、由于线程间频繁交换数据,造成程序缓慢。2、由于队列是由链表组成,是否需要线程同步,如使用线程同步会不会加重程序 任务。3、使用Window消息发送数据不知是否可行。他能否承受如此大的通讯任务。4、网络间通讯的大容量数据是如何处理的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 windows 消息处理速度也是勉强可以啦。如果用消息传递数据可能会慢 最好用SOCKET,这样的话,就不会慢了。 对!用CSocket传输可以的!稳定性可以@!我试过! 设立共享缓冲区是速度最快的,把缓冲区加锁,效率不会降低多少的。特别是在非WIN OS 下面。 最简单的方式是设立公有变量或共享缓存区,不必用CSocket.不同的线程处理同一个队列或链表是,需要对该链表加锁,如CCriticalSection速度不会有问题,我用过的比你复杂的多:很多线程,很多公用变量. win/unix/linux其实都一样,要想速度快,就不要绕过太多的弯路,一个线程把数据放在内存中,另一个来取,是最快的。消息应该和socket一样慢,尤其CSocket是基于消息的。内存缓冲区+锁我想是最好最快的,不过最好简化共享区操作,使各个线程等待操作共享区的时间越小越好。 我的建议:(一)同一服务器进程间通讯: 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 的建议 TO: zj_zyq(飞鸽) 什么叫 内存队列和磁盘队列? 在工作线程中通过PostThreadMessage()向主线程发送自定义消息,在主线程中对相应的自定义消息做相应的消息处理。 补充:强烈建议阅读侯捷的《Win32多线程编程》。 Visual C++ 2010 能用 Mschart 吗? techart呢? 哪个好些? 关于SetScrollInfo和GetScrollInfo float转int出现值不准,求教啊 谁能详细解释一下这条语句 一个关于时间的问题,请教各位 棘手难题,请教大虾们。 霓裳羽衣(淡月儿) 打印分页问题!解决高分相送! 求助!在单文档的view中画图。 VC中左视窗LeftView的点击怎么响应。 关于CDocManager这个类 在win2000 Professional下如何安装IIS
用CSocket传输可以的!稳定性可以@!我试过!
不同的线程处理同一个队列或链表是,需要对该链表加锁,如CCriticalSection
速度不会有问题,我用过的比你复杂的多:很多线程,很多公用变量.
要想速度快,就不要绕过太多的弯路,
一个线程把数据放在内存中,另一个来取,是最快的。
消息应该和socket一样慢,尤其CSocket是基于消息的。
内存缓冲区+锁我想是最好最快的,
不过最好简化共享区操作,使各个线程等待操作
共享区的时间越小越好。
(一)同一服务器进程间通讯:
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 的建议
什么叫 内存队列和磁盘队列?
强烈建议阅读侯捷的《Win32多线程编程》。