阿......嚏 2025-05-23 19:00 采纳率: 18.2%
浏览 59

okhttp-sse调用LLM大模型连接线程池问题

通过okhttp-sse调用大模型时因为其线程池、连接池的问题导致请求无法及时响应。截取Dispatcher代码片如下:

class Dispatcher constructor() {
  private fun promoteAndExecute(): Boolean {
    this.assertThreadDoesntHoldLock()

    val executableCalls = mutableListOf<AsyncCall>()
    val isRunning: Boolean
    synchronized(this) {
      val i = readyAsyncCalls.iterator()
      while (i.hasNext()) {
        val asyncCall = i.next()

        if (runningAsyncCalls.size >= this.maxRequests) break // Max capacity.
        if (asyncCall.callsPerHost.get() >= this.maxRequestsPerHost) continue // Host max capacity.

        i.remove()
        asyncCall.callsPerHost.incrementAndGet()
        executableCalls.add(asyncCall)
        runningAsyncCalls.add(asyncCall)
      }
      isRunning = runningCallsCount() > 0
    }

    for (i in 0 until executableCalls.size) {
      val asyncCall = executableCalls[i]
      // 真正异步执行executableCalls集合中的任务
      asyncCall.executeOn(executorService)
    }

    return isRunning
  }
}
  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-05-23 19:00
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    okHttp-SSE 调用 LLM 大模型连接线程池问题

    你遇到的问题是 OkHttp-SSE 调用 LLM 大模型时,线程池和连接池的问题导致请求无法及时响应。Dispatcher 类的代码片段显示了 OkHttp-SSE 的线程池机制。

    解决方案:

    1. 了解 OkHttp-SSE 的线程池机制:OkHttp-SSE 使用了一个线程池来处理请求,这个线程池的大小可以通过 maxThreads 参数来配置。默认情况下,线程池的大小是 5。
    2. 优化线程池大小:如果你的应用程序需要处理大量请求,可以尝试增加线程池的大小,以提高请求的处理速度。但是,需要注意的是,线程池的大小过大可能会导致内存溢出和性能下降。
    3. 使用连接池:OkHttp-SSE 也提供了连接池机制,可以通过 connectionPool 参数来配置连接池的大小和超时时间。连接池可以帮助减少请求的 latency 和提高请求的成功率。
    4. 优化大模型的连接方式:如果你的大模型需要长时间的连接,可以尝试使用长连接或 WebSockets 来提高连接的稳定性和性能。

    核心代码:

    val dispatcher = Dispatcher()
    dispatcher.maxThreads = 10 // 设置线程池的大小
    val client = OkHttpClient.Builder()
        .dispatcher(dispatcher)
        .build()
    
    val client = OkHttpClient.Builder()
        .connectionPool(ConnectionPool(10, 10, TimeUnit.SECONDS)) // 设置连接池的大小和超时时间
        .build()
    

    注意:上述代码只是示例代码,实际情况可能需要根据你的应用程序的需求和环境进行调整。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月23日