{}const=>[]async()letfn</>var
開発Lua

Luaのコルーチン:マルチスレッドなしでステップバイステップコードを書く方法

Luaでコルーチンを解析することは、関数を一時停止して再開する簡単な方法です。ゲーム、ネットワークタスク、非同期コードに最適です。

К

Kodik

著者

1分で読める

並列性に関しては、ほとんどのプログラマーはすぐに思い出します マルチスレッド または 非同期しかし、Luaには独自のツールがあります。 コルティン。これにより、複数のスレッドを持っているかのようにコードを記述できますが、実行は単一のスレッド内に留まります。

コルーチンとは 軽い「流れ」、手動で一時停止および再開できます。

最初から最後まで実行される通常の関数とは異なり、コルーチンは次のことができます。

  • 実行中に停止する、

  • 呼び出し元のコードに制御を戻します。

  • そして、同じ場所から作業を続けます。

これはゲーム🎮の一時停止のようなものです。状態を保存し、同じ瞬間から静かに続行しました。

Luaでのコルーチンの例

function worker()
    for i = 1, 3 do
        print("Step " .. i)
        coroutine.yield() -- приостанавливаемся
    end
end

co = coroutine.create(worker)

coroutine.resume(co) --> Шаг 1
coroutine.resume(co) --> Шаг 2
coroutine.resume(co) --> Шаг 3

分析:

  • coroutine.create — コルーチンを作成します。

  • coroutine.resume — それを開始または続行します。

  • coroutine.yield —実行を一時停止します。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

coroutineはスレッドとどう違うのですか?

スレッド

コルーチン

OS 管理

Lua自体によって管理されます

並行して実行可能

1つずつ実行されます

デバッグが難しい

シンプルで予測可能

データ保護が必要です(mutex、lock)

実際の並列処理がないため安全

コルーチンはどこで役立ちますか?

  • ゲームとアニメーション — 入れ子になったifとタイマーなしのステップバイステップのシナリオ。

  • 非同期タスク — ネットワーク要求、イベント処理。

  • スクリプトシナリオ — NPC またはボットの動作の簡単な説明。

ゲームの小さな例

function npc()
    print("NPC: I'm coming...")
    coroutine.yield()
    print("NPC: I stopped...")
    coroutine.yield()
    print("NPC: I'm coming again!")
end

co = coroutine.create(npc)
coroutine.resume(co) -- NPC: Я иду...
coroutine.resume(co) -- NPC: Я остановился...
coroutine.resume(co) -- NPC: Я снова иду!

複雑なロジックの代わりに、オブジェクトのミニシアターを書くようなシンプルなシナリオを使用します。

合計

Luaのコルーチンとは マルチスレッドではなく、並列実行を簡単にシミュレートする方法。ゲーム、ネットワークアプリケーション、およびアクションの順序を制御することが重要なシナリオに最適です。

Luaを学ぶ場合は、必ずコルーチンを試してみてください。これにより、アーキテクチャが大幅に簡素化されます。 コディケ Luaのタスクを伴う興味深いコース。

また、アクティブな テレグラムチャンネル、ここでは素晴らしいアイデアについて話し合い、経験を共有し、課題を一緒に分析します。学習は有益であるだけでなく、楽しいものになります。

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要