Perbahasan Besar Async/Await: Mengapa Pendekatan Go Terhadap Keserentakan Mungkin Lebih Baik

BigGo Editorial Team
Perbahasan Besar Async/Await: Mengapa Pendekatan Go Terhadap Keserentakan Mungkin Lebih Baik

Komuniti pengaturcaraan sedang terlibat dalam perbahasan hangat mengenai async/await, satu ciri yang telah menjadi lazim dalam bahasa pengaturcaraan moden. Walaupun pada mulanya disambut baik sebagai penyelesaian kepada masalah callback hell, ciri ini telah mencetuskan kontroversi dalam kalangan pembangun yang berpendapat bahawa ia mewujudkan lebih banyak masalah berbanding penyelesaian.

Masalah Pewarnaan Fungsi

Salah satu kritikan paling ketara terhadap async/await ialah apa yang dikenali sebagai masalah pewarnaan fungsi. Apabila sesuatu fungsi menggunakan await, ia mesti ditandakan sebagai async, dan keperluan ini merebak ke atas melalui keseluruhan tindanan panggilan. Jangkitan penanda async ini telah menjadi titik kesakitan utama bagi pembangun, membawa kepada kekecewaan meluas dan kerumitan kod.

Pendekatan Alternatif

Pendekatan Go terhadap keserentakan telah mendapat perhatian sebagai alternatif yang berpotensi. Berbanding async/await, Go menggunakan goroutines dan channels, melaksanakan apa yang dikenali sebagai Communicating Sequential Processes (CSP). Pendekatan ini membolehkan pembangun menulis kod yang kelihatan sinkronus sementara runtime mengendalikan kerumitan pelaksanaan serentak.

CSP adalah lebih mudah. Yang lebih mudah adalah lebih senang untuk dilaksanakan dengan betul. Saya pernah menulis banyak pelayan tak segerak dalam C sehingga beberapa dekad yang lalu. Saya mendapatinya mudah. Kebanyakan orang tidak. Kita mempunyai cara yang lebih baik untuk melakukan perkara-perkara hari ini.

Pendekatan Utama dalam Keserentakan:

  • Async/Await: Koroutin tanpa tindanan dengan penanda async yang jelas
  • Pendekatan Go: Koroutin bertindanan dengan keserentakan tersirat
  • CSP: Proses Berjujukan Berkomunikasi
  • Virtual Threads: Pendekatan JVM untuk pembenangan ringan

Kes untuk Coroutines Bertindanan

Ramai pembangun berpendapat bahawa coroutines bertindanan, seperti yang dilaksanakan dalam Go, menyediakan pengabstrakan yang lebih baik berbanding jenis tanpa tindanan yang digunakan dalam kebanyakan pelaksanaan async/await. Perbezaan utama terletak pada bagaimana runtime mengendalikan konteks pelaksanaan. Pendekatan Go membolehkan pembangun menulis kod yang lebih terus tanpa perlu menandakan sempadan async secara eksplisit, sambil mengekalkan pelaksanaan serentak yang cekap.

Cabaran Pengaturcaraan UI

Satu hujah penting yang menyokong async/await datang daripada pengaturcaraan UI. Dalam aplikasi GUI, menghalang thread utama menyebabkan antara muka yang tidak responsif. Async/await menyediakan cara yang bersih untuk mengendalikan operasi latar belakang sambil mengekalkan UI yang responsif. Ini menjadikannya sangat bernilai dalam pembangunan frontend dan aplikasi desktop.

Persoalan Prestasi

Perkembangan terkini, seperti virtual threads Java, telah mencabar hujah prestasi yang secara tradisional digunakan untuk membenarkan async/await. Sesetengah pembangun berpendapat bahawa kerumitan yang diperkenalkan oleh async/await tidak dibenarkan oleh faedah prestasinya, terutamanya dalam aplikasi perniagaan biasa di mana penukaran konteks jarang menjadi bottleneck.

Kesimpulan

Walaupun async/await telah menjadi ciri standard dalam banyak bahasa pengaturcaraan moden, perbahasan mengenai kelebihannya berterusan. Perbincangan ini menyoroti ketegangan yang lebih luas dalam pembangunan perisian antara pengabstrakan dan kerumitan, dan antara pendekatan berbeza untuk mengendalikan operasi serentak. Seiring dengan evolusi bidang ini, kita mungkin akan melihat paradigma baru muncul yang lebih seimbang dalam menangani keperluan yang bersaing ini.

Sumber Rujukan: Async Await Is The Worst Thing To Happen To Programming