Hacker News

ການຈັດຕັ້ງປະຕິບັດ Zig – io_uring ແລະ Grand Central Dispatch std.Io ໄດ້ລົງຈອດ

ການຈັດຕັ້ງປະຕິບັດ Zig – io_uring ແລະ Grand Central Dispatch std.Io ໄດ້ລົງຈອດ ການສໍາຫຼວດນີ້ delves ເຂົ້າໄປໃນ io_uring, ກວດເບິ່ງຄວາມສໍາຄັນແລະຜົນກະທົບທີ່ເປັນໄປໄດ້ຂອງມັນ. ແນວຄວາມຄິດຫຼັກກວມເອົາ ເນື້ອຫານີ້ສຳຫຼວດ: ຫຼັກການພື້ນຖານ ແລະ...

2 min read Via ziglang.org

Mewayz Team

Editorial Team

Hacker News

ຫ້ອງສະໝຸດມາດຕະຖານຂອງ Zig ໄດ້ບັນລຸຈຸດສຳຄັນຄື: ພື້ນຫຼັງຂອງ io_uring ແລະ Grand Central Dispatch (GCD) backends ສຳລັບ std.Io ໄດ້ລົງຈອດຢ່າງເປັນທາງການ, ນຳເອົາ I/O ແບບບໍ່ຊິ້ງຂອງແພລດຟອມທີ່ມີປະສິດຕິພາບສູງ, ມາເປັນພາສາໜຶ່ງຂອງລະບົບການໂປຣແກມທີ່ທັນສະໄໝທີ່ສຸດ. ສຳລັບຜູ້ພັດທະນາກໍ່ສ້າງພື້ນຖານໂຄງລ່າງທີ່ໃຫ້ພະລັງແກ່ແພລດຟອມທຸລະກິດຍຸກຕໍ່ໄປ — ເຊັ່ນ: ລະບົບປະຕິບັດການ 207-module ທີ່ຢູ່ເບື້ອງຫຼັງ Mewayz — ການພັດທະນານີ້ເປັນສັນຍານເຖິງຍຸກໃໝ່ຂອງປະສິດທິພາບ ແລະຄວາມສາມາດໃນການຂະຫຍາຍຫຼັງ.

io_uring ແມ່ນຫຍັງ ແລະເປັນຫຍັງມັນຈຶ່ງສຳຄັນສຳລັບແອັບພລິເຄຊັນທີ່ທັນສະໄໝ?

ແນະນໍາໃນ Linux kernel 5.1, io_uring ເປັນການໂຕ້ຕອບ I/O asynchronous ທີ່ມີປະສິດຕິພາບສູງທີ່ມີການປ່ຽນແປງພື້ນຖານຂອງວິທີການທີ່ແອັບພລິເຄຊັນພົວພັນກັບລະບົບປະຕິບັດການ. ແບບຈໍາລອງ I/O ແບບດັ້ງເດີມບັງຄັບໃຫ້ບັນດາໂຄງການເຮັດການໂທຫາລະບົບແຕ່ລະອັນສໍາລັບແຕ່ລະການອ່ານຫຼືຂຽນ - ການເດີນທາງໄປກັບລາຄາແພງທີ່ປະສິດທິພາບໃນຂະຫນາດ. io_uring ແທນອັນນີ້ດ້ວຍ ring buffer ທີ່ໃຊ້ຮ່ວມກັນລະຫວ່າງພື້ນທີ່ຜູ້ໃຊ້ ແລະ kernel, ເຮັດໃຫ້ແອັບພລິເຄຊັນສາມາດສົ່ງ ແລະເຮັດສຳເລັດການດຳເນີນການ I/O ຫລາຍພັນອັນດ້ວຍຄ່າໃຊ້ຈ່າຍໜ້ອຍທີ່ສຸດ.

ຜົນກະທົບທາງປະຕິບັດແມ່ນຢ່າງຫຼວງຫຼາຍ. ເຊີບເວີເວັບ, ຖານຂໍ້ມູນ, ແລະແພລະຕະຟອມ SaaS ທີ່ຈັດການການເຊື່ອມຕໍ່ພ້ອມກັນຫຼາຍພັນອັນໄດ້ຮັບຜົນປະໂຫຍດທັນທີຈາກການຫຼຸດ CPU overhead ແລະ latency ຕ່ໍາ. ສໍາລັບແພລດຟອມທີ່ໃຫ້ບໍລິການຜູ້ໃຊ້ 138,000 ຄົນໃນທົ່ວ 207 ໂມດູນທີ່ແຕກຕ່າງກັນ — ແຕ່ລະໄຟລ໌ທີ່ກະຕຸ້ນໃຫ້ອ່ານ, ການສອບຖາມຖານຂໍ້ມູນ ແລະຄໍາຮ້ອງຂໍເຄືອຂ່າຍ — ຄວາມແຕກຕ່າງລະຫວ່າງ I/O ແລະ io_uring ແບບເກົ່າສາມາດແປໄດ້ໂດຍກົງໃນການປັບປຸງເວລາຕອບສະຫນອງແລະການຫຼຸດຜ່ອນຄ່າໃຊ້ຈ່າຍໃນໂຄງສ້າງພື້ນຖານ.

"io_uring ເປັນການເພີ່ມເຕີມທີ່ສຳຄັນຕໍ່ Linux I/O ໃນຮອບໜຶ່ງທົດສະວັດ. ໂດຍການກໍາຈັດການປ່ຽນສະພາບການຂອງ syscalls ແບບດັ້ງເດີມ, ມັນຊ່ວຍໃຫ້ໂຄງການພື້ນທີ່ຜູ້ໃຊ້ສາມາດເຂົ້າຫາຮາດແວດິບໄດ້ - ການປ່ຽນແປງເກມສໍາລັບທຸກແອັບພລິເຄຊັນທີ່ I/O ເປັນຄໍຂອດ."

Grand Central Dispatch ເໝາະກັບເລື່ອງ Zig std.Io ແນວໃດ?

ໃນຂະນະທີ່ io_uring ເປັນສະເພາະຂອງ Linux, Grand Central Dispatch (GCD) ຂອງ Apple ໄດ້ໃຊ້ເປັນກອບວຽກທີ່ສອດຄ່ອງກັນອັນດັບຕົ້ນໆ ແລະ ກອບວຽກໃນ macOS ແລະ iOS. GCD ຫຍໍ້ການຈັດການກະທູ້ເຂົ້າໄປໃນຕົວແບບທີ່ອີງໃສ່ຄິວ, ຊ່ວຍໃຫ້ລະບົບປະຕິບັດການກໍານົດເວລາເຮັດວຽກໄດ້ດີທີ່ສຸດໃນທົ່ວ CPU cores ທີ່ບໍ່ມີຜູ້ພັດທະນາຈັດການ thread pools ດ້ວຍຕົນເອງ.

ໂດຍການລົງຈອດທັງສອງ backend ພາຍໃຕ້ std.Io abstraction ທີ່ເປັນເອກະສັນກັນ, ທີມງານ Zig ໄດ້ບັນລຸບາງສິ່ງບາງຢ່າງທີ່ຍາກແທ້ໆ: ພື້ນຜິວ API async I/O ດຽວທີ່ລວບລວມກັບຕົ້ນສະບັບ, idiomatic async primitives ໃນທັງສອງ Linux ແລະ Apple platforms. ນີ້ໝາຍຄວາມວ່າໂປຣແກຣມ Zig ທີ່ຖືກຂຽນຂື້ນກັບ std.Io ນຳໃຊ້ io_uring ເທິງເຊີບເວີ Linux ແລະ GCD ໂດຍອັດຕະໂນມັດໃນເຄື່ອງພັດທະນາ macOS — ບໍ່ມີການແຍກສາຂາສະເພາະໃນລະຫັດແອັບພລິເຄຊັນ.

ສະພາບການທາງປະຫວັດສາດທີ່ຢູ່ເບື້ອງຫຼັງການເດີນທາງ Async I/O ຂອງ Zig ແມ່ນຫຍັງ?

ເສັ້ນທາງຂອງ Zig ໄປສູ່ເລື່ອງ async ຄົງທີ່ແມ່ນເປັນເລື່ອງທີ່ໂດດເດັ່ນ. ເວີຊັ່ນຕົ້ນໆຂອງພາສາລວມມີ syntax async/await ທົດລອງທີ່ໄດ້ຖືກຖອດຖອນອອກໃນພາຍຫລັງທີ່ທີມງານໄດ້ພິຈາລະນາການອອກແບບຄືນໃໝ່. ແທນທີ່ຈະໃຫ້ຄໍາໝັ້ນສັນຍາກັບຕົວແບບທີ່ສອດຄ່ອງກັນສະເພາະເຂົ້າໃນໄວຍະກອນຂອງພາສາ, ທີມງານຫຼັກ Zig ໄດ້ເລືອກຊັ້ນ I/O abstraction ໃນລະດັບຫ້ອງສະໝຸດມາດຕະຖານ — ອັນໜຶ່ງທີ່ຍັງຄົງສາມາດເຂົ້າກັນໄດ້ກັບຍຸດທະສາດຕົວປະຕິບັດທີ່ແຕກຕ່າງກັນ.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

ປັດ​ຊະ​ຍາ​ນີ້​ສອດ​ຄ່ອງ​ກັບ​ຈັນ​ຍາ​ບັນ​ການ​ອອກ​ແບບ​ທີ່​ກວ້າງ​ຂວາງ​ຂອງ Zig: ບໍ່​ມີ​ການ​ໄຫຼ​ຂອງ​ການ​ຄວບ​ຄຸມ​ທີ່​ເຊື່ອງ​ໄວ້​, ການ​ຈັດ​ສັນ​ຢ່າງ​ຊັດ​ເຈນ​, ແລະ​ກົນ​ໄກ​ປະ​ກອບ​ດ້ວຍ​ການ​ຄາດ​ຄະ​ເນ​. ການໂຕ້ຕອບ std.Io ສະແດງໃຫ້ເຫັນເຖິງຈຸດສຸດຍອດຂອງການໂຕ້ວາທີຂອງຊຸມຊົນຫຼາຍປີ, ການສ້າງຕົວແບບ, ແລະຄໍາຕິຊົມໃນໂລກທີ່ແທ້ຈິງ. Landing io_uring ແລະ backends GCD ໝາຍເຖິງການປ່ຽນຈາກການທົດລອງໄປສູ່ການຜະລິດ - ກຽມພ້ອມສໍາລັບລະບົບນິເວດ async ຂອງ Zig.

ສິ່ງ​ທີ່​ມີ​ຜົນ​ກະ​ທົບ​ທາງ​ປະ​ຕິ​ບັດ​ສໍາ​ລັບ SaaS ແລະ​ໂຄງ​ລ່າງ​ພື້ນ​ຖານ​ເວ​ທີ​ທຸ​ລະ​ກິດ​ແມ່ນ​ຫຍັງ?

ສຳ​ລັບ​ທີມ​ທີ່​ສ້າງ ຫຼື​ປະ​ເມີນ​ໂຄງ​ລ່າງ​ພື້ນ​ຖານ​ເບື້ອງ​ຫຼັງ​ສຳ​ລັບ​ຫຼາຍ​ແພລດ​ຟອມ SaaS ທີ່​ມີ​ຜູ້​ເຊົ່າ, ເລື່ອງ Zig io_uring ມີ​ຜົນ​ສະທ້ອນ​ອັນ​ໜັກໜ່ວງ​ຫຼາຍ​ຢ່າງ:

  • ຫຼຸດຄ່າໃຊ້ຈ່າຍໃນພື້ນຖານໂຄງລ່າງ: ອັດຕາການສົ່ງຜ່ານ I/O ທີ່ສູງຂຶ້ນຕໍ່ເຊີບເວີໝາຍຄວາມວ່າມີເຄື່ອງຈັກໜ້ອຍລົງເພື່ອຮັບມືກັບການໂຫຼດທຽບເທົ່າ, ສົ່ງຜົນກະທົບໂດຍກົງຕໍ່ການໃຊ້ຈ່າຍໃນຄລາວ.
  • ຄວາມລ່າຊ້າທີ່ສາມາດຄາດເດົາໄດ້ໃນຂະໜາດ: ຮູບແບບການສົ່ງຂໍ້ມູນແບບ batched ຂອງ io_uring ປັບປຸງການເລັ່ງເວລາແພັກເກັດທີ່ພົບທົ່ວໄປພາຍໃຕ້ຄວາມສອດຄ່ອງສູງ, ປັບປຸງປະສົບການຂອງຜູ້ໃຊ້ໃນທົ່ວທຸກໂມດູນຂອງແພລດຟອມ.
  • ເຄື່ອງມືນັກພັດທະນາຂ້າມແພລດຟອມ: ດ້ວຍການສະຫນັບສະຫນູນ GCD, ນັກພັດທະນາໃນ macOS ສາມາດເອີ້ນໃຊ້ logic I/O ດຽວກັນຢູ່ໃນເຄື່ອງທີ່ນຳໃຊ້ກັບເຊີບເວີການຜະລິດ Linux — ປິດຊ່ອງຫວ່າງອັນຍາວນານໃນການທົດສອບຄວາມຊື່ສັດ.
  • ການອອກແບບລະບົບການພິສູດໃນອະນາຄົດ: ໃນຂະນະທີ່ການຮັບຮອງເອົາ io_uring ເຕີບໂຕໃນເຄື່ອງມືທີ່ຢູ່ໃກ້ຄຽງ (ຖານຂໍ້ມູນ, ຕົວແທນ, ເວລາແລ່ນ), Zig's native support positions it good for composing with the wider modern Linux ecosystem.
  • ຄວາມປອດໄພຂອງໜ່ວຍຄວາມຈຳທີ່ບໍ່ມີການເກັບຂີ້ເຫຍື້ອ: ຮູບແບບການເປັນເຈົ້າຂອງ Zig ຈັບຄູ່ກັບຄວາມສາມາດຂອງ io_uring's zero-copy ສໍາລັບການຈັດການ buffer ທີ່ກໍາຈັດແມງໄມ້ທັງໝົດທີ່ພົບເລື້ອຍໃນລະຫັດເຄືອຂ່າຍລະດັບລະບົບ.

ແນວໂນ້ມອະນາຄົດອັນໃດທີ່ນັກພັດທະນາຄວນເບິ່ງເມື່ອລະບົບນິເວດນີ້ພັດທະນາ?

ການລົງຈອດຂອງ backends ເຫຼົ່ານີ້ແມ່ນຈຸດເລີ່ມຕົ້ນ, ບໍ່ແມ່ນຈຸດສິ້ນສຸດ. ການພັດທະນາຈໍານວນຫນຶ່ງແມ່ນມີມູນຄ່າຕິດຕາມຢ່າງໃກ້ຊິດ. ຫນ້າທໍາອິດ, ລະບົບນິເວດ Zig ຍັງເຕີບໃຫຍ່ຢູ່ປະມານ abstractions ລະດັບສູງ - ເຄື່ອງແມ່ຂ່າຍ HTTP, ໄດເວີຖານຂໍ້ມູນ, ແລະກອບ RPC ທີ່ສ້າງຂຶ້ນໃນ std.Io ຈະກໍານົດຄວາມໄວຂອງພາສາເຂົ້າໄປໃນການຜະລິດ SaaS stacks. ອັນທີສອງ, io_uring ຕົວຂອງມັນເອງຍັງສືບຕໍ່ພັດທະນາ; ຄຸນສົມບັດຕ່າງໆເຊັ່ນ buffers ຄົງທີ່, ການດໍາເນີນການ multishot, ແລະ kernel-side polling ສະເຫນີ headroom ປະສິດທິພາບເພີ່ມເຕີມທີ່ backend ຂອງ Zig ສາມາດເປີດເຜີຍຄວາມຄືບຫນ້າ. ອັນທີສາມ, ເມື່ອ WebAssembly runtimes ເປີດເຜີຍສ່ວນຕິດຕໍ່ WASI I/O ເພີ່ມຂຶ້ນ, ຊັ້ນ abstraction ຂອງ Zig ວາງມັນເພື່ອແນໃສ່ສະພາບແວດລ້ອມນັ້ນເຊັ່ນດຽວກັນ, ເຮັດໃຫ້ລະຫັດລະບົບ write-once-run- anywhere.

ສຳລັບແພລດຟອມທີ່ຈັດລຳດັບຄວາມສຳຄັນໃນການປະຕິບັດການ - ເຊັ່ນ: Mewayz, ເຊິ່ງບີບອັດລະບົບການດຳເນີນທຸລະກິດທັງໝົດເຂົ້າໃນການສະໝັກສະມາຊິກ $19–$49/ເດືອນ — ການປັບປຸງພື້ນຖານໂຄງລ່າງ. ທຸກໆການເພີ່ມປະສິດທິພາບໃນຊັ້ນລະບົບຈະແປເປັນ headroom ສໍາລັບຄຸນສົມບັດເພີ່ມເຕີມ, ຜູ້ໃຊ້ຫຼາຍຂຶ້ນ ແລະຂອບທີ່ດີຂຶ້ນ.

ຄຳຖາມທີ່ຖາມເລື້ອຍໆ

io_uring ປອດໄພທີ່ຈະໃຊ້ໃນສະພາບແວດລ້ອມການຜະລິດໃນມື້ນີ້ບໍ?

ແມ່ນ. io_uring ສາມາດໃຊ້ໄດ້ຕັ້ງແຕ່ Linux kernel 5.1 (2019) ແລະໃນປັດຈຸບັນຖືວ່າມີຄວາມຫມັ້ນຄົງສໍາລັບການນໍາໃຊ້ການຜະລິດ. ໂຄງການໃຫຍ່ລວມທັງ Redis, RocksDB, ແລະເຄື່ອງແມ່ຂ່າຍເຄືອຂ່າຍປະສິດທິພາບສູງຈໍານວນຫລາຍໄດ້ຮັບຮອງເອົາມັນ. ການປະຕິບັດ Zig ປະຕິບັດຕາມ kernel interfaces ດຽວກັນແລະເຫມາະສົມສໍາລັບການຜະລິດວຽກກ່ຽວກັບການແຈກຢາຍ Linux ທີ່ທັນສະໄຫມທີ່ແລ່ນ kernel 5.6 ຫຼືໃຫມ່ກວ່າສໍາລັບການສະຫນັບສະຫນູນຄຸນນະສົມບັດຢ່າງເຕັມທີ່.

ຂ້ອຍຈໍາເປັນຕ້ອງຂຽນລະຫັດ Zig ທີ່ມີຢູ່ແລ້ວເພື່ອໃຊ້ backends std.Io ໃໝ່ບໍ?

ບໍ່​ຈໍາ​ເປັນ​ຕ້ອງ​ມີ​ການ​ຂຽນ​ຄືນ​ໃຫມ່​ທີ່​ສໍາ​ຄັນ​. ການໂຕ້ຕອບ std.Io ຖືກອອກແບບມາເປັນຊັ້ນ abstraction ທີ່ຫມັ້ນຄົງ — ລະຫັດແອັບພລິເຄຊັນທີ່ຂຽນໃສ່ມັນຈະໄດ້ຮັບຜົນປະໂຫຍດອັດຕະໂນມັດຈາກ backend io_uring ຫຼື GCD ໂດຍອີງໃສ່ເປົ້າຫມາຍການລວບລວມ. ຄວາມພະຍາຍາມໃນການເຄື່ອນຍ້າຍຕົ້ນຕໍກ່ຽວຂ້ອງກັບການອັບເດດເປັນ Zig toolchain ເວີຊັນປັດຈຸບັນເຊິ່ງລວມມີ backends ເຫຼົ່ານີ້ ແລະ ປັບລະຫັດໃດໆກໍຕາມທີ່ເຄີຍໃຊ້ I/O syscalls ສະເພາະເວທີໂດຍກົງ.

ອັນນີ້ປຽບທຽບກັບ async I/O ໃນ Runtime ຂອງ Rust ຂອງ Tokio ຫຼື Go ແນວໃດ?

Tokio ເທິງ Linux ຍັງໃຊ້ io_uring ຜ່ານ crate tokio-uring, ເຖິງແມ່ນວ່າມັນຍັງຄົງແຍກອອກຈາກ Tokio runtime ເລີ່ມຕົ້ນທີ່ໃຊ້ epoll. ເວລາແລ່ນຂອງ Go ໃຊ້ຕົວກຳນົດເວລາຂອງຕົນເອງດ້ວຍ I/O ທີ່ອີງໃສ່ epoll. ວິທີການຂອງ Zig ແຕກຕ່າງກັນໃນທີ່ std.Io ແມ່ນ synchronous-feeling ໃນລະດັບ API — ບໍ່ມີ async/await syntax — ໃນຂະນະທີ່ຍັງສົ່ງກັບ async primitives ຕົ້ນສະບັບພາຍໃຕ້ hood. ອັນນີ້ຮັກສາການອ່ານໄດ້ ແລະຫຼີກເວັ້ນບັນຫາ "ຟັງຊັນສີ" ທີ່ສັບສົນ async Rust codebases.


ບໍ່ວ່າທ່ານຈະເປັນນັກພັດທະນາທີ່ປະເມີນພາສາການຂຽນໂປຣແກຣມລະບົບສຳລັບໂຄງການພື້ນຖານໂຄງລ່າງຕໍ່ໄປຂອງທ່ານ ຫຼືເຈົ້າຂອງທຸລະກິດທີ່ຊອກຫາເວທີທີ່ສ້າງຂຶ້ນດ້ວຍເທັກໂນໂລຍີທີ່ມີປະສິດທິພາບ, ສາມາດຂະຫຍາຍໄດ້, ເສັ້ນທາງຂອງເຄື່ອງມືເຊັ່ນ Zig ສະທ້ອນເຖິງການປ່ຽນແປງທີ່ກວ້າງຂຶ້ນໄປສູ່ການອອກແບບຊອບແວທຳອິດ. Mewayz ຖືກສ້າງຂື້ນໃນຫຼັກການດຽວກັນນີ້ — ການຈັດສົ່ງ 207 ໂມດູນທຸລະກິດປະສົມປະສານໃຫ້ແກ່ຜູ້ໃຊ້ຫຼາຍກວ່າ 138,000 ຄົນໃນສ່ວນໜຶ່ງຂອງຄ່າໃຊ້ຈ່າຍໃນການປະກອບເຄື່ອງມືທຽບເທົ່າແຕ່ລະອັນ. ຈາກ CRM ແລະການວິເຄາະໄປສູ່ການເຊື່ອມໂຍງໃນຊີວະພາບແລະການຈັດສົ່ງຫຼັກສູດ, OS ທຸລະກິດທັງຫມົດແມ່ນມີຢູ່ເລີ່ມຕົ້ນທີ່ $ 19 / ເດືອນ. ເລີ່ມການທົດລອງໃຊ້ຟຣີຂອງທ່ານທີ່ app.mewayz.com ແລະປະສົບການການອອກແບບແພລດຟອມທີ່ທັນສະໄໝ ແລະມີປະສິດທິພາບໃນພາກປະຕິບັດ.