From 27265d82c05642a9d5b953b776ff4583af704d94 Mon Sep 17 00:00:00 2001
From: Ryo Yamashita <qryxip@gmail.com>
Date: Thu, 12 Sep 2024 09:44:11 +0900
Subject: [PATCH] =?UTF-8?q?`Unstoppable`=20=E2=86=92=20`SingleTasked`?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

https://github.com/VOICEVOX/voicevox_core/pull/830#discussion_r1754333231
https://chatgpt.com/share/cdae540e-5751-43a5-a1fb-ac1f17d6a1b8
---
 crates/voicevox_core/src/asyncs.rs      | 15 ++++++++++-----
 crates/voicevox_core/src/voice_model.rs |  4 ++--
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/crates/voicevox_core/src/asyncs.rs b/crates/voicevox_core/src/asyncs.rs
index b9f5edfdb..cd3c7c314 100644
--- a/crates/voicevox_core/src/asyncs.rs
+++ b/crates/voicevox_core/src/asyncs.rs
@@ -8,7 +8,7 @@
 //! [blocking]クレートで駆動する非同期処理はランタイムが無くても動作する。そのため非同期版APIを
 //! もとにブロッキング版APIを構成することはできる。しかし将来WASMビルドすることを考えると、スレッド
 //! がまともに扱えないため機能しなくなってしまう。そのためWASM化を見越したブロッキング版APIのため
-//! に[`Unstoppable`]を用意している。
+//! に[`SingleTasked`]を用意している。
 //!
 //! [ブロッキング版API]: crate::blocking
 //! [非同期版API]: crate::tokio
@@ -27,14 +27,19 @@ pub(crate) trait Async: 'static {
     async fn open_file(path: impl AsRef<Path>) -> io::Result<impl AsyncRead + AsyncSeek + Unpin>;
 }
 
-/// "async"としての責務を放棄し、すべてをブロックする。
+/// エグゼキュータが非同期タスクの並行実行をしないことを仮定する、[`Async`]の実装。
 ///
 /// [ブロッキング版API]用。
 ///
+/// # Performance
+///
+/// `async`の中でブロッキング操作を直接行う。そのためTokioやasync-stdのような通常の非同期ランタイム
+/// 上で動くべきではない。
+///
 /// [ブロッキング版API]: crate::blocking
-pub(crate) enum Unstoppable {}
+pub(crate) enum SingleTasked {}
 
-impl Async for Unstoppable {
+impl Async for SingleTasked {
     async fn open_file(path: impl AsRef<Path>) -> io::Result<impl AsyncRead + AsyncSeek + Unpin> {
         return std::fs::File::open(path).map(UnstoppableFile);
 
@@ -62,7 +67,7 @@ impl Async for Unstoppable {
     }
 }
 
-/// [blocking]クレートで駆動する。
+/// [blocking]クレートで駆動する[`Async`]の実装。
 ///
 /// [非同期版API]用。
 ///
diff --git a/crates/voicevox_core/src/voice_model.rs b/crates/voicevox_core/src/voice_model.rs
index 96a7d4ec4..ac49d2cdb 100644
--- a/crates/voicevox_core/src/voice_model.rs
+++ b/crates/voicevox_core/src/voice_model.rs
@@ -388,7 +388,7 @@ pub(crate) mod blocking {
     use uuid::Uuid;
 
     use crate::{
-        asyncs::Unstoppable, error::LoadModelResult, future::FutureExt as _,
+        asyncs::SingleTasked, error::LoadModelResult, future::FutureExt as _,
         infer::domains::InferenceDomainMap, VoiceModelMeta,
     };
 
@@ -397,7 +397,7 @@ pub(crate) mod blocking {
     /// 音声モデル。
     ///
     /// VVMファイルと対応する。
-    pub struct VoiceModel(Inner<Unstoppable>);
+    pub struct VoiceModel(Inner<SingleTasked>);
 
     impl self::VoiceModel {
         pub(crate) fn read_inference_models(