Avatar
omochimetaru 2/11/2023 9:41 AM
Swift ConcurrencyにはCPUハードな処理を書いてはいけないという認識です
9:42 AM
協調的マルチタスクを前提に設計されていて、
9:42 AM
スケジューラが確保してる実スレッド数が有限になっていると思うので
9:43 AM
例えば実スレッド数が4個になるような環境で、
9:43 AM
重いタスクが4つ投げられた結果、
9:43 AM
その他のすぐに終わる非同期処理が全部戻ってこなくなるという問題が起こりうると思う。
9:43 AM
CPUハードな処理が例えばものすごい回数ループするような処理であるならば、
9:43 AM
Task.yield() を呼び出すことで
9:44 AM
一つ一つのPartial Task(suspenstion pointに挟まれる同期部分)が短い実行時間で済むようにできて、これならセーフです (edited)
9:44 AM
APIとして Task.yield が存在するのもこのような状況に対応するためという認識です。 (edited)