请教:使用消息队列是不是不宜直接传输大量的数据?

area88 2011-02-14 08:46:33
请教:使用消息队列是不是不宜直接传输大量的数据?只用来传数据缓存地址
...全文
1221 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
夫人的泡泡鱼 2011-12-25
  • 打赏
  • 举报
回复
我就用的消息队列,传递数组名和长度
hunterzone 2011-12-23
  • 打赏
  • 举报
回复
wparam和lparam可以传送指针。。。
呆萌-鱼 2011-09-25
  • 打赏
  • 举报
回复
另外, 消息队列满的时候, 操作系统是将其丢弃的, 如果你的数据属于不能够丢弃的消息 就需要自己实现缓冲
呆萌-鱼 2011-09-25
  • 打赏
  • 举报
回复
1.从性能方面来讲, 确实采用传地址的方式要好一些, 但是出于安全性考虑, 采用传索引的方式更好, 即数据缓冲区由自己进行管理, 通过传递索引的方式来提高安全性。
2.消息队列也可以用于大量数据的传输, 比如说系统间的调试输出消息, 打印消息等。
countrysoft 2011-09-25
  • 打赏
  • 举报
回复
那要看楼主说的“不宜”怎么理解?
1、一般来讲,从E2E来看,如果传地址确实能够减少拷贝次数,并且访问消息数据时不需要互斥保护,肯定性能好一些,也节约内存;
2、传地址还有一个解耦的好处,就是消息最大长度和消息队列的参数是解耦的;
3、如果想传递实际的内容,消息最大长度又确定不下来,那就使用stream型的通讯方式,比如FIFO、管道、TCP等,但接收方消息定界会复杂一些。

topcool99 2011-09-13
  • 打赏
  • 举报
回复
最佳方式:
消息结构+指针
hongkiaong 2011-08-26
  • 打赏
  • 举报
回复
vxworks的消息队列采用的是数据拷贝操作,如果直接将数据拷贝到队列,会非常浪费内存,因为队列在初始化的时候需要明确单个消息的最大size,以及消息队列的长度,这样,在初始化时消息队列申请的内存=最大size ×队列长度

第二个原因:大量数据的拷贝,效率上相对较低


综合以上原因,最好是消息队列只传递地址、长度、类型,设计合理的话,值传递一个地址即可
bflyswhbflyswh 2011-08-17
  • 打赏
  • 举报
回复
既然叫消息,使用上当然是只传递必要的地址和长度等信息就好了,其他的还是自己来,尽量减少内存拷贝,例如循环队列缓冲等。
异乡客 2011-08-14
  • 打赏
  • 举报
回复
要想效率高,还是传地址。
frank_zhou 2011-04-29
  • 打赏
  • 举报
回复
没有问题的,只要系统内存够,多大都没有问题。
使用消息队列的好处是系统帮你做了同步和互斥了,可以很方便地实现队列方式。在数据量不是太大的时候完全没有问题的,相当于是内存拷贝,速度也足够快。
关键是从系统考虑的话,一般尽量减少无谓的拷贝,一般应用的时候,如果是大数据量的话没有必要直接数据传递,传个指针就好了啊,另外用sem进行同步即可。
tristan1 2011-02-24
  • 打赏
  • 举报
回复
确实是这样的,我们通常使用的策略是发生一个很小的数据,另外一边的接受函数(死循环任务)一直在检查消息队列,当有消息,马上调用 收包函数(里面会去读buffer)。

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧