系统软件性能调优策略(一)——通过有名管道FIFO来检测消息队列中是否可读

来源:互联网 发布:淘宝买枪的暗语是什么 编辑:程序博客网 时间:2024/05/01 16:40

    在基于网络的开发中,socket的发送、接收状态,可以通过select来进行检测。但如果又有其他的业务要处理,比如处理消息队列,则可能会出现两难的情况:
1)tmval.tv_usec = 20;
   select(sockid,,,,&tmval);
   select等待指定时间,如果期间有消息需要处理,则会造成CPU资源的浪费、业务流程处理的延时,而产生性能降低;
2)select(sockid,,,,0)
   NO_WAIT方式,则可能会造成系统空转,CPU无谓负荷高,造成系统资源的浪费。

一种好的处理方式是,借用复用I/O的技术,将队列的读取转换为有名管道FIFO的状态检测,具体如下:

   这样,即使是在以下任何一种情况下,都会使得select被激活并返回,就不会造成CPU资源的效率,并且系统的性能将大大得到提高。

备注:
   此法,只适用于Unix。由于Windows上的select仅仅对socket有效,所以此法不适用。

原创粉丝点击