0Pricing
Lua Academy · Pelajaran

Membangun Perulangan Peristiwa Sederhana

Implementasikan penjadwal coroutine dengan antrean eksekusi dan perulangan resume.

Membangun Perulangan Peristiwa Sederhana adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Apa Itu Loop Peristiwa?

Loop peristiwa menjalankan penjadwal yang melakukan resume terhadap korutin ketika peristiwa yang ditunggunya siap. Hal ini memungkinkan beberapa tugas berjalan serentak tanpa utas OS.

Antrean Eksekusi

Mulailah dengan antrean korutin yang siap. Pada setiap detak, proses semua korutin yang siap satu per satu.

local queue = {}
local function spawn(fn)
  queue[#queue+1] = coroutine.create(fn)
end

Detak Perulangan

Setiap detak mengambil dan melakukan resume terhadap setiap korutin yang siap. Korutin yang menyerahkan kendali dijeda sampai ditambahkan kembali ke antrean.

local function runLoop()
  while #queue > 0 do
    local current = queue
    queue = {}
    for _, co in ipairs(current) do
      local ok, err = coroutine.resume(co)
      if not ok then print("Error:", err) end
      if coroutine.status(co) ~= "dead" then
        queue[#queue+1] = co  -- re-queue if still alive
      end
    end
  end
end

Menyerahkan Kendali untuk Menjeda

Korutin menyerahkan kendali ketika perlu menunggu. Penjadwal melakukan resume terhadapnya pada detak berikutnya.

spawn(function()
  print("Task A: step 1")
  coroutine.yield()  -- pause
  print("Task A: step 2")
end)
spawn(function()
  print("Task B: only step")
end)
runLoop()

Penundaan Simulasi

Terapkan tidur dengan mencatat kapan korutin harus dibangunkan.

local timers = {}
local function sleep(seconds)
  local wakeAt = os.clock() + seconds
  timers[coroutine.running()] = wakeAt
  coroutine.yield()
end

Perulangan yang Memperhatikan Pewaktu

Pada setiap detak, periksa pewaktu dan masukkan kembali korutin yang waktu bangunnya telah lewat.

local function timedLoop()
  while #queue > 0 or next(timers) do
    local now = os.clock()
    for co, wakeAt in pairs(timers) do
      if now >= wakeAt then
        timers[co] = nil
        queue[#queue+1] = co
      end
    end
    -- process queue...
  end
end

Integrasi Masukan/Keluaran

Integrasikan dengan mekanisme select/poll: jeda korutin yang menunggu masukan/keluaran, lalu lakukan resume terhadapnya ketika deskriptor berkasnya siap.

Isolasi Kesalahan

Bungkus setiap pelanjutan korutin dalam pemanggilan yang terlindungi, atau periksa nilai keberhasilannya. Korutin yang mengalami kerusakan tidak boleh menghentikan seluruh perulangan.

Penjadwalan Kooperatif

Tugas harus menyerahkan kendali secara sukarela. Korutin yang berjalan selamanya tanpa menyerahkan kendali akan membuat semua korutin lain tidak mendapat giliran. Gunakan debug.sethook dengan penghitung langkah sebagai pelindung prapenghentian untuk kode yang tidak tepercaya.

Prioritas Tugas

Terapkan beberapa antrean (prioritas tinggi/normal/rendah) dan kosongkan antrean berprioritas lebih tinggi terlebih dahulu pada setiap detak.

Alternatif di Dunia Nyata

Loop peristiwa untuk produksi: luv (pengikatan libuv), copas (berbasis soket), OpenResty (nginx + soket kooperatif). Buat sendiri hanya untuk pembelajaran atau penggunaan tertanam.

Pertanyaan tentang Loop Peristiwa

Mengapa korutin dalam loop peristiwa kooperatif harus menyerahkan kendali secara sukarela?

Ringkasan: Loop Peristiwa Sederhana

Loop peristiwa menggunakan antrean eksekusi korutin. Pada setiap detak, korutin yang siap dilanjutkan. Tugas menyerahkan kendali untuk menjeda, lalu dimasukkan kembali ke antrean ketika kondisinya terpenuhi. Hal ini memungkinkan masukan/keluaran dan pewaktu berjalan serentak dalam Lua dengan satu utas.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membangun Perulangan Peristiwa Sederhana” gratis?

Ya — teks lengkap “Membangun Perulangan Peristiwa Sederhana” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membangun Perulangan Peristiwa Sederhana”?

Implementasikan penjadwal coroutine dengan antrean eksekusi dan perulangan resume. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Membangun Perulangan Peristiwa Sederhana” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membangun Perulangan Peristiwa Sederhana
  2. Async/Await dengan Coroutine
  3. Pola Mirip Promise
  4. I/O Non-Pemblokiran dengan luasocket
← Kembali ke Lua Academy