如何使此Java延迟Web服务调用代码使用的CPU更少?

时间:2019-03-04 16:46:14

标签: java concurrency java.util.concurrent

我一直在对应用程序进行cpu分析,并且我注意到,花费大量时间的事情之一是代码,该代码确保我每秒向Web服务发送的查询多于查询。与之相比,实际的查询本身和结果的处理花费的时间很少,当然,有一个I / O组件在等待结果,但是我想做的是减少cpu,因为应用程序有时必须在单个cpu机器上运行

使用 YourKit Profiler 使用大量CPU的呼叫是

Public Function Get_Department_Name(ByVal Recipient As String)
    Dim obApp As Object
    Dim NewMail As MailItem
    Set obApp = Outlook.Application
    Set NewMail = obApp.CreateItem(olMailItem)    
    With NewMail
         .Subject = "Test Subject"
         .To = Recipient
         .Body = " Body of Message "
    End With
Get_Department_Name  = NewMail.Recipients.Item(1).AddressEntry.Manager().Department

    NewMail.Delete
   Set obApp = Nothing
    Set NewMail = Nothing
End Function

我的延迟方法低于

 java.util.concurrent.locks.AbstractQueuedSynchronizer.aquireQueued()

1 个答案:

答案 0 :(得分:0)

好吧,使用Google Guava库,事实证明它非常简单

import com.google.common.util.concurrent.RateLimiter;
public class SearchServer
{
     private static RateLimiter rateLimiter = RateLimiter.create(1.0d);

     static void doDelayQuery()
     {
        rateLimiter.acquire();
     }

     public doQuery()
     ..................
}

尽管以前的主要区别是我花了上次通话的时间,所以没有在通话之间等待一秒钟,所以为了获得相似的吞吐量,我将RateLmiter更改为使用2.0d

分析不再显示该区域的CPU命中率。