Elasticsearch 線程池「每個線程池到底采用哪種實現策略」:
?Elasticsearch 線程池(ThreadPool)中 **所有內置線程池名稱的常量定義**。 ?
每個字符串常量對應一個 **線程池的名字(name)**,也就是你在 `ThreadPool.Names` 或 REST API 里能看到的線程池標識。
下面把每個名字翻譯成中文含義(按常見用途):
| 常量名 | 含義 / 用途 |
|--------|-------------|
| **SAME** | 當前線程(不切換線程池),用于非常輕量或需要同步的操作。 |
| **GENERIC** | 通用線程池,處理各種一次性、非關鍵的后臺任務。 |
| **GET** | 處理 `GET` / `MGET` 文檔讀取請求。 |
| **ANALYZE** | 執行 `_analyze` API(文本分析器相關)。 |
| **WRITE** | 處理寫操作:index、update、delete、bulk 等。 |
| **SEARCH** | 處理普通搜索請求(非凍結索引)。 |
| **SEARCH_COORDINATION** | 搜索協調階段(如聚合、排序、分頁)專用,減輕 SEARCH 線程池壓力。 |
| **AUTO_COMPLETE** | 自動補全 / 建議(completion suggester)專用。 |
| **SEARCH_THROTTLED** | 凍結索引或低優先級索引的搜索請求,限流處理。 |
| **MANAGEMENT** | 集群管理任務,如更新設置、創建索引、集群狀態更新等。 |
| **FLUSH** | 執行 flush(內存緩存刷盤)。 |
| **REFRESH** | 執行 refresh(使文檔可搜索)。 |
| **WARMER** | 舊版本中的索引預熱(已廢棄,7.x 后移除)。 |
| **SNAPSHOT** | 執行快照備份(snapshot/restore)。 |
| **SNAPSHOT_META** | 快照元數據操作(如列出倉庫內容)。 |
| **FORCE_MERGE** | 強制執行段合并(force merge)。 |
| **FETCH_SHARD_STARTED** | 獲取分片啟動狀態(集群發現階段)。 |
| **FETCH_SHARD_STORE** | 獲取分片存儲信息(用于分片分配)。 |
| **SYSTEM_READ** | 系統級讀操作(如讀取 .security、.kibana 等系統索引)。 |
| **SYSTEM_WRITE** | 系統級寫操作(如寫 .security 索引)。 |
| **SYSTEM_CRITICAL_READ** | 關鍵系統讀(如認證、授權)。 |
| **SYSTEM_CRITICAL_WRITE** | 關鍵系統寫(如更新集群元數據)。 |
你可以通過:
```bash
GET /_cat/thread_pool?v
```
查看每個線程池的活躍線程、隊列、拒絕情況。
這幾個枚舉值定義了 **Elasticsearch 線程池的類型(ThreadPoolType)**,決定了線程池的行為方式:
| 類型名稱 | 中文含義 | 特點說明 |
|----------|----------|----------|
| **DIRECT** | 直接執行(無線程池) | 任務在當前線程中同步執行,**不切換線程**,**無隊列**,**無并發限制**。<br>用于極輕量或必須同步的操作。 |
| **FIXED** | 固定大小線程池 | 線程數固定,隊列大小也固定。<br>超過隊列容量會觸發拒絕策略(`AbortPolicy` 默認)。<br>常見于 `SEARCH`、`WRITE` 等高頻線程池。 |
| **FIXED_AUTO_QUEUE_SIZE** | 固定線程 + 自適應隊列 | **已廢棄**,7.x 開始標為 `@Deprecated`,9.0 計劃移除。<br>隊列大小會根據負載動態調整(實驗性功能),實際很少使用。 |
| **SCALING** | 彈性線程池 | 線程數按需創建,**空閑線程會被回收**。<br>適用于低頻、突發任務,如 `MANAGEMENT`、`SNAPSHOT` 等。 |
### ? 一句話總結
- **DIRECT**:同步執行,不走池。
- **FIXED**:線程數和隊列都固定,最常用。
- **FIXED_AUTO_QUEUE_SIZE**:廢棄,別用。
- **SCALING**:按需創建線程,用完回收,適合低頻任務。
你可以在源碼里看到它們是通過 `ThreadPoolType` 枚舉定義的,決定了線程池的構造方式。
| 線程池名稱(Names.*) | 線程池類型(ThreadPoolType) | 設計意圖簡述 |
|------------------------|------------------------------|--------------|
| **SAME** | **DIRECT** | 當前線程立即執行,無池、無隊列,極簡路徑。 |
| **GENERIC** | **SCALING** | 低頻雜活,線程按需創建,用完即回收。 |
| **GET** | **FIXED** | 高并發 point-get,固定線程+固定隊列,穩定。 |
| **ANALYZE** | **FIXED** | 文本分析請求量可控,FIXED 足夠。 |
| **WRITE** | **FIXED** | 寫流量大且持續,固定資源避免抖動。 |
| **SEARCH** | **FIXED** | 普通搜索主戰場,獨立固定池保障吞吐。 |
| **SEARCH_COORDINATION** | **FIXED** | 聚合/排序/分頁協調階段,獨立出來防止阻塞 SEARCH。 |
| **MANAGEMENT** | **SCALING** | 集群管理任務低頻突發,彈性線程即可。 |
| **FLUSH / REFRESH / WARMER** | **SCALING** | 后臺數據管理操作,按需伸縮。 |
| **SNAPSHOT / SNAPSHOT_META** | **SCALING** | 備份相關任務,非持續高并發,彈性更省資源。 |
| **FORCE_MERGE** | **FIXED** | 合并段是重 IO 操作,固定線程數避免過度并發。 |
| **FETCH_SHARD_STARTED / FETCH_SHARD_STORE** | **SCALING** | 分片發現及存儲信息拉取,啟動階段偶發,彈性即可。 |
| **SEARCH_THROTTLED** | **FIXED** | 凍結索引的“慢車道”,單線程+小隊列,強制限流。 |
| **SYSTEM_READ / SYSTEM_WRITE** | **FIXED** | 系統索引讀寫要求穩定低延遲,用固定池。 |
| **SYSTEM_CRITICAL_READ / SYSTEM_CRITICAL_WRITE** | **FIXED** | 關鍵系統操作(如安全認證),獨立固定線程保障 QoS。 |
### ? 一句話記憶
- **高頻、關鍵路徑** → 用 `FIXED`(固定線程) ?
- **低頻、突發任務** → 用 `SCALING`(彈性線程) ?
- **極簡同步** → 用 `DIRECT`(當前線程)