gpt4 book ai didi

java - java中如何确定某个请求的优先级?

转载 作者:行者123 更新时间:2023-12-03 11:17:51 27 4
gpt4 key购买 nike

我觉得这是一个非常小众的问题,所以我会尽可能地解释它。
简介:
我每秒发送约 500 个请求,我觉得我发送的请求越多,处理请求的速度就越慢(在某些时候它变得明显变慢)
问题:所以问题是在 Java 中有什么方法可以对请求进行优先级排序?我正在寻求的任何解决方案是 优化此类请求的速度..因此,在发送请求之前需要时间的任何答案都不是我关心的。
信息: (我希望这足够了,如果不是请告诉我!)

  • 我使用的库是 apache httpclients(但是如果解决方案需要,我可以切换)
  • 我也在一台服务器/电脑上多线程处理请求。我希望这是有用的信息。
  • CPU 使用率从 (5-15%) 不等 - 我相信这些是测量值
    enter image description here

  • 我正在发送 2 种类型的请求,我只需要优先处理 1 种类型
  • HTTP GET 请求 - 预期 HTML 响应
  • HTTP POST 请求 - 预期的 JSON 响应(虽然我不需要响应)

  • #2 是我想要优先处理的请求。我很少发送这个请求,但是当我发送它时,我需要它尽可能快。
    想到的解决办法:我想出的唯一解决方案是停止/结束所有实时连接以执行我想要的请求,但是我认为这样做会花费大量时间,导致解决方案浪费时间。
    注意:你可以说我在这方面是个白痴,所以如果解决方案不存在或很明显,我很抱歉,如果有重复,我也很抱歉..我找不到任何与此相关的问题。

    最佳答案

    这可能是一种解决方法,因为它必须在发送请求之前执行。考虑到您的用例(每秒 500 个请求),我的建议是首先发送最关键的请求,使用 PriorityQueue .
    由于您已经对消息进行批处理以发送它们,因此这种方法将有助于根据设置的优先级对批处理消息进行排序。

    您可以先将请求包装到另一个包含 priority 的实体中。 field 。例如,骨架/底座 PriorityRequest 类(class):

    public class PriorityRequest implements Comparable<PriorityRequest> 
    {
    public int priority;
    public PriorityRequest(int priority)
    {
    this.priority=priority;
    }

    @Override
    public int compareTo(PriorityRequest request)
    {
    return Integer.compare(request.priority,this.priority);
    }
    }

    并声明两个 child , HttpPostHttpGet :
    public class PriorityHttpPost extends PriorityRequest 
    {
    public HttpPost post;
    public PriorityHttpPost(int priority, HttpPost post)
    {
    super(priority);
    this.post=post;
    }
    }
    public class PriorityHttpGet extends PriorityRequest 
    {
    public HttpGet get;
    public PriorityHttpGet(int priority, HttpGet get)
    {
    super(priority);
    this.get=get;
    }
    }

    因此,当您创建请求时,您可以将它们插入到队列中,以便它们自动位于其优先级的基础上:
    Queue<PriorityRequest> requestQueue = new PriorityQueue<>();

    /*into the batch mechanism*/
    requestQueue.add(new PriorityHttpPost(6,httpPost));
    //...
    requestQueue.add(new PriorityHttpGet(99,httpGet));
    //...

    这样,您可以保证具有较高优先级的请求在较低优先级的请求之前离开队列,因为它们将按降序排列。
    Queue- | Get  (99) | --> out
    | Get (9) |
    | Post (6) |
    | Get (3) |
    | Post (1) |

    Queue- | Get (9) | --> out
    | Post (6) |
    | Get (3) |
    | Post (1) |

    (...)

    最后,这种方法的一些额外功能(在某些用例中)包括能够定义 哪些元素先走,哪些最后走 :
    requestQueue.add(new PriorityHttpPost(INTEGER.MAX_VALUE, httpPostMax));
    requestQueue.add(new PriorityHttpPost(INTEGER.MAX_VALUE-1, httpPostVery));
    requestQueue.add(new PriorityHttpPost(INTEGER.MIN_VALUE+1, httpPostNotVery));
    requestQueue.add(new PriorityHttpPost(INTEGER.MIN_VALUE, httpPostNoOneCares));
    ——
    完美世界,是的,我知道..
    Queue- | Post (MAX)   | --> out
    | Post (MAX-1) |
    | ............ |
    | ............ |
    | Post (MIN+1) |
    | Post (MIN) |

    关于java - java中如何确定某个请求的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65820285/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com