Chinaunix

标题: 【IPC】谨慎设置msgrcv函数msgtyp参数为负数 [打印本页]

作者: ilex    时间: 2014-08-22 19:39
标题: 【IPC】谨慎设置msgrcv函数msgtyp参数为负数
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

【括号内来自百度
msgtyp:消息类型
msgtyp等于0 则返回队列的最早的一个消息。
msgtyp大于0,则返回其类型为mtype的第一个消息。
msgtyp小于0,则返回其类型小于或等于mtype参数的绝对值的最小的一个消息。


最近一个问题,某些场景消息队列效率低下。
发现是msgtyp设置为0和32都不出现,设置为-32时有较大概率出现
百思不解,不能说是因为内核慢问题就不解决,
看里内核代码才明白,如果设置-32,极端情况下会遍历所有的缓存,

构造极端用例验证,msgsnd(msgtyp=5),发10万+消息,再做msgrcv(-32),初期一个消息竟然要10-20ms,全部收完要很长时间。
(办公机硬件一般,windows7 + virtualBox ubuntu虚拟机)

作者: folklore    时间: 2014-08-23 08:01
》》 则返回其类型小于或等于mtype参数的绝对值的最小的一个消息
<< 这个不得不遍历啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2