Lua Academy · Pelajaran

Membina Gelung Peristiwa Ringkas

Laksanakan penjadual coroutine dengan baris gilir pelaksanaan dan gelung resume.

Pelajaran 1 daripada 413 langkah

Membina Gelung Peristiwa Ringkas ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Apakah Itu Gelung Peristiwa

Gelung peristiwa menjalankan penjadual yang melakukan resume terhadap korutin apabila peristiwa yang ditunggu telah sedia. Gelung ini membolehkan berbilang tugas serentak tanpa rangkaian OS.

Baris Gilir Pelaksanaan

Mulakan dengan baris gilir korutin yang sedia. Pada setiap kitaran, proses semua korutin yang sedia satu demi satu.

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

Kitaran Gelung

Pada setiap kitaran, keluarkan dan lakukan resume terhadap setiap korutin yang sedia. Korutin yang melakukan yield dijeda sehingga dimasukkan semula ke dalam baris gilir.

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

Melakukan Yield untuk Menjeda

Korutin melakukan yield apabila perlu menunggu. Penjadual melakukan resume terhadapnya pada kitaran seterusnya.

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()

Kelewatan Simulasi

Laksanakan tidur dengan menjejaki masa korutin sepatutnya bangun.

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

Gelung dengan Kesedaran Pemasa

Pada setiap kitaran, semak pemasa dan masukkan semula korutin ke dalam baris gilir apabila waktu bangunnya telah berlalu.

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

Penyepaduan I/O

Sepadukan dengan mekanisme select/poll: lakukan yield terhadap korutin yang menunggu I/O, kemudian lakukan resume apabila deskriptor failnya telah sedia.

Pengasingan Ralat

Balut setiap resume korutin dalam panggilan terlindung atau semak nilai pulangan berjaya. Korutin yang ranap tidak sepatutnya menghentikan keseluruhan gelung.

Penjadualan Koperatif

Tugas mesti melakukan yield secara sukarela. Korutin yang berjalan selama-lamanya tanpa melakukan yield akan menyebabkan semua korutin lain kebuluran. Gunakan debug.sethook dengan pembilang langkah sebagai pengawal prapengosongan untuk kod yang tidak dipercayai.

Keutamaan Tugas

Laksanakan berbilang baris gilir (keutamaan tinggi/biasa/rendah) dan kosongkan baris gilir berkeutamaan lebih tinggi dahulu pada setiap kitaran.

Alternatif Dunia Sebenar

Gelung peristiwa untuk penggunaan produksi: luv (pengikatan libuv), copas (berasaskan soket), OpenResty (nginx + cosocket). Bina sendiri hanya untuk pembelajaran atau penggunaan terbenam.

Soalan Gelung Peristiwa

Mengapakah korutin dalam gelung peristiwa koperatif mesti melakukan yield secara sukarela?

Imbas Kembali: Gelung Peristiwa Ringkas

Gelung peristiwa menggunakan baris gilir pelaksanaan korutin. Pada setiap kitaran, gelung melakukan resume terhadap korutin yang sedia. Tugas melakukan yield untuk menjeda, kemudian dimasukkan semula ke dalam baris gilir apabila syaratnya dipenuhi. Ini membolehkan I/O dan pemasa serentak dalam Lua satu rangkaian.

Percuma untuk bermula

Pelajari Lua dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
40
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Membina Gelung Peristiwa Ringkas” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Membina Gelung Peristiwa Ringkas”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Membina Gelung Peristiwa Ringkas”?

Laksanakan penjadual coroutine dengan baris gilir pelaksanaan dan gelung resume. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Membina Gelung Peristiwa Ringkas” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Membina Gelung Peristiwa Ringkas
  2. Async/Await dengan Coroutine
  3. Corak Seperti Promise
  4. I/O Tanpa Sekatan dengan luasocket
← Kembali ke Lua Academy