当前位置: 技术问答>linux和unix
关于POSIX message queue的效率问题?
来源: 互联网 发布时间:2017-01-05
本文导语: 在queue的大小一定的情况下,比如8k, 发送8k + 接收8k(循环2千万次)与 发送1k + 接收1k(循环2千万次)的执行时间居然几乎无差别! 为什么会这样? | 首先申明,俺自己没有测试过,所...
在queue的大小一定的情况下,比如8k,
发送8k + 接收8k(循环2千万次)与
发送1k + 接收1k(循环2千万次)的执行时间居然几乎无差别!
为什么会这样?
发送8k + 接收8k(循环2千万次)与
发送1k + 接收1k(循环2千万次)的执行时间居然几乎无差别!
为什么会这样?
|
首先申明,俺自己没有测试过,所以以下的说法都是猜测:
发送和接收都涉及到几个步骤, 以发送为例,大致分为以下三个步骤
1. 用户态下组织数据
2. 系统调用进入核心态
3. 核心态下将数据从用户空间拷贝到内核空间(放入队列)
所以总的时间消耗为三个步骤时间相加 t = t1 + t2 + t3;
其中系统调用进入核心态涉及上下文切换,是非常耗时的操作,比拷贝8K的数据消耗的时间大的多。
所以造成了发送1K数据和发送8K数据没使用的时间差不多。
发送和接收都涉及到几个步骤, 以发送为例,大致分为以下三个步骤
1. 用户态下组织数据
2. 系统调用进入核心态
3. 核心态下将数据从用户空间拷贝到内核空间(放入队列)
所以总的时间消耗为三个步骤时间相加 t = t1 + t2 + t3;
其中系统调用进入核心态涉及上下文切换,是非常耗时的操作,比拷贝8K的数据消耗的时间大的多。
所以造成了发送1K数据和发送8K数据没使用的时间差不多。
|
没有深究过,这个需要看看消息队列的实现,另外数据的移动也可能用到诸如DMA这样的技术
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。