feat(infrastructure): виртуальные потоки для исполнителей запросов LSP#4140
Conversation
Cached-пулы обработчиков запросов LSP (textDocumentServiceExecutor, workspaceServiceExecutor, sentryExecutor) переведены с ThreadPoolTaskExecutor на SimpleAsyncTaskExecutor в режиме виртуальных потоков (setVirtualThreads(true)). Это I/O-bound задачи «один запрос — одна задача», для которых виртуальные потоки оптимальны; TaskDecorator (Sentry + micrometer) для переноса контекста сохранён. Добавлен глобальный флаг spring.threads.virtual.enabled=true (веб-контейнер websocket/MCP, планировщик, дефолтный @async). Тяжёлые ForkJoinPool-исполнители (диагностики, парсинг, populate) намеренно ОСТАВЛЕНЫ на ForkJoinPool: их вложенный мелкозернистый parallelStream — CPU-bound и требует work-stealing, на виртуальных потоках деградирует на порядки. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (6)
📝 WalkthroughWalkthroughThree LSP executor beans in ChangesVirtual Thread Executor Migration
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|



Что
Cached-пулы обработчиков запросов LSP (
textDocumentServiceExecutor,workspaceServiceExecutor,sentryExecutor) переведены сThreadPoolTaskExecutorнаSimpleAsyncTaskExecutorв режиме виртуальных потоков (setVirtualThreads(true)). Это I/O-bound задачи «один запрос — одна задача», для которых виртуальные потоки оптимальны;TaskDecorator(Sentry + micrometer) для переноса контекста сохранён.Добавлен глобальный флаг
spring.threads.virtual.enabled=true(веб-контейнер websocket/MCP, планировщик, дефолтный@Async).Чего здесь намеренно НЕТ
Тяжёлые
ForkJoinPool-исполнители (диагностики, парсинг, populate, semantic tokens, CLI) оставлены на ForkJoinPool. Перевод их на VT-fan-out был испробован и откатан: их вложенный мелкозернистыйparallelStream— CPU-bound и опирается на work-stealing. Замер SmokyTest:Проверка
./gradlew compileJava,spotlessJavaCheck,SmokyTest(~60 с),BSLWorkspaceServiceTest,BSLTextDocumentServiceTest— зелёные.🤖 Generated with Claude Code
Summary by CodeRabbit