Perdebatan Besar Async/Await: Mengapa Pendekatan Go terhadap Konkurensi Mungkin Lebih Baik

BigGo Editorial Team
Perdebatan Besar Async/Await: Mengapa Pendekatan Go terhadap Konkurensi Mungkin Lebih Baik

Komunitas pemrograman sedang terlibat dalam perdebatan sengit tentang async/await, sebuah fitur yang telah menjadi sangat umum dalam bahasa pemrograman modern. Meskipun awalnya dirayakan sebagai solusi untuk callback hell, fitur ini telah memicu kontroversi di antara para pengembang yang berpendapat bahwa fitur ini menciptakan lebih banyak masalah daripada solusi.

Masalah Pewarnaan Fungsi

Salah satu kritik paling signifikan terhadap async/await adalah apa yang dikenal sebagai masalah pewarnaan fungsi. Ketika sebuah fungsi menggunakan await, fungsi tersebut harus ditandai sebagai async, dan persyaratan ini merambat ke atas melalui seluruh tumpukan pemanggilan. Infeksi penanda async ini telah menjadi titik permasalahan utama bagi pengembang, yang menyebabkan frustrasi dan kompleksitas kode yang meluas.

Pendekatan Alternatif

Pendekatan Go terhadap konkurensi telah menarik perhatian sebagai alternatif potensial. Alih-alih menggunakan async/await, Go menggunakan goroutines dan channels, menerapkan apa yang dikenal sebagai Communicating Sequential Processes (CSP). Pendekatan ini memungkinkan pengembang untuk menulis kode yang tampak sinkron sementara runtime menangani kompleksitas eksekusi konkuren.

CSP lebih sederhana. Yang lebih sederhana lebih mudah untuk dilakukan dengan benar. Saya dulu banyak menulis server asinkron dalam C hingga beberapa dekade yang lalu. Saya merasa itu mudah. Kebanyakan orang tidak. Kita memiliki cara yang lebih baik untuk melakukan hal-hal tersebut saat ini.

Pendekatan Utama dalam Konkurensi:

  • Async/Await: Coroutine tanpa stack dengan penanda async eksplisit
  • Pendekatan Go: Coroutine dengan stack lengkap dan konkurensi implisit
  • CSP: Proses Sekuensial yang Berkomunikasi (Communicating Sequential Processes)
  • Virtual Threads: Pendekatan JVM untuk threading ringan

Kasus untuk Coroutines Bertumpuk

Banyak pengembang berpendapat bahwa coroutines bertumpuk, seperti yang diterapkan dalam Go, memberikan abstraksi yang lebih baik daripada jenis tanpa tumpukan yang digunakan dalam kebanyakan implementasi async/await. Perbedaan utama terletak pada bagaimana runtime menangani konteks eksekusi. Pendekatan Go memungkinkan pengembang untuk menulis kode yang lebih lugas tanpa secara eksplisit menandai batas async, sambil tetap mempertahankan eksekusi konkuren yang efisien.

Tantangan Pemrograman UI

Satu argumen kuat yang mendukung async/await berasal dari pemrograman UI. Dalam aplikasi GUI, memblokir thread utama menyebabkan antarmuka tidak responsif. Async/await menyediakan cara yang bersih untuk menangani operasi latar belakang sambil menjaga UI tetap responsif. Hal ini membuatnya sangat berharga dalam pengembangan frontend dan aplikasi desktop.

Pertanyaan Kinerja

Perkembangan terbaru, seperti virtual threads Java, telah menantang argumen kinerja yang secara tradisional digunakan untuk membenarkan async/await. Beberapa pengembang berpendapat bahwa kompleksitas yang diperkenalkan oleh async/await tidak dibenarkan oleh manfaat kinerjanya, terutama dalam aplikasi bisnis tipikal di mana pengalihan konteks jarang menjadi bottleneck.

Kesimpulan

Meskipun async/await telah menjadi fitur standar di banyak bahasa pemrograman modern, perdebatan seputar manfaatnya terus berlanjut. Diskusi ini menyoroti ketegangan yang lebih luas dalam pengembangan perangkat lunak antara abstraksi dan kompleksitas, serta antara pendekatan berbeda dalam menangani operasi konkuren. Seiring berkembangnya bidang ini, kita mungkin akan melihat paradigma baru muncul yang lebih baik dalam menyeimbangkan kepentingan yang saling bertentangan ini.

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