Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

Concurency di PHP: Sebuah Contoh Sederhana

Posted on May 28, 2024

Sebagai seseorang yang jatuh cinta dengan PHP, bekerja dengan bahasa ini selama hampir 10 tahun, dan kemudian pindah ke negara lain sebagai Insinyur Perangkat Lunak, di mana sebagian besar pengalaman saya adalah dalam PHP, saya selalu merasa iri dengan bahasa pemrograman lain yang memiliki alat yang baik untuk menangani konkurensi.

Saya tidak yakin apakah suatu hari PHP bisa mencapai titik tersebut, dan saya berasumsi bahwa ini mungkin bukan sesuatu yang sedang diupayakan. Saya harus mengakui bahwa saya menikmati bekerja dengan Promises di JavaScript. Saya juga menyukai bagaimana konkurensi diimplementasikan di Go dengan channels, select, goroutines, dan fitur lainnya. Jadi, ketika bekerja dengan PHP, saya merasa ada sesuatu yang kurang.

Namun, di tahun 2024 ini, segalanya tampak berbeda. Saya sangat bersemangat dengan semua kolaborasi dan alat baru yang telah ditambahkan ke komunitas PHP dan proyek-proyeknya. Bahasanya tampak lebih stabil, alat-alatnya tampak lebih matang, dan banyak perusahaan, termasuk startup dan perusahaan besar, dibangun di atas PHP. Mengenai startup, saya tidak bisa memikirkan opsi lain yang lebih baik untuk membentuk produk selain menggunakan framework PHP!

Inovasi Terbaru dalam PHP

Ada beberapa hal yang menurut saya sangat berharga dan layak untuk dicoba:

  • Laravel Octane
  • FrankenPHP

Apa Itu Konkurensi?

Dalam ilmu komputer, konkurensi adalah kemampuan dari berbagai bagian atau unit dari sebuah program, algoritma, atau masalah untuk dieksekusi tidak sesuai urutan atau dalam urutan parsial, tanpa mempengaruhi hasil akhir.

– Wikipedia

Bayangkan Anda sedang bekerja dengan skrip CLI yang melakukan tugas-tugas yang memakan waktu dan bisa dipecah menjadi tugas-tugas yang lebih kecil. Ini bisa berupa pemanggilan beberapa endpoint REST, menyimpan dan membaca data ke dalam basis data, perubahan sistem file, atau tugas lainnya. Biasanya dalam PHP, kode berjalan baris demi baris dan thread utama selalu melakukan satu hal pada satu waktu. Kita tidak memiliki forking dan joining thread anak ke thread utama secara default, tetapi kita bisa memanfaatkan paket kecil dari composer untuk mencapai itu. Yang perlu Anda lakukan adalah menambahkan paket spatie/fork ke proyek Anda. Paket ini membutuhkan modul pcntl dan sockets untuk bekerja. Pastikan Anda memiliki modul ini dalam proyek Anda.

Jika Anda menjalankan php -m di terminal Anda, Anda harus melihat modul-modul ini sebagai berikut:

shellCopy code[PHP Modules]
...
pcntl
sockets
...

Saatnya Koding

Bayangkan Anda memiliki fungsi yang lambat dan Anda bergantung pada hasilnya. Yang dilakukan fungsi ini adalah menghitung dari 0 hingga 100 juta.

phpCopy codefunction timeConsumingFunction($to = 100000000): int
{
    $sum = 0;
    for ($i = 0; $i < $to; $i++) {
        $sum++;
    }

    return $sum;
}

Biasanya kita menulis sesuatu seperti ini:

phpCopy codeecho array_sum(
    [
        timeConsumingFunction(),
        timeConsumingFunction(),
        timeConsumingFunction(),
    ]
);

Berapa lama waktu yang dibutuhkan? Mari kita uji waktu:

phpCopy code$start_time = microtime(TRUE);

echo "Result: " . array_sum(
    [
        timeConsumingFunction(),
        timeConsumingFunction(),
        timeConsumingFunction(),
    ]
);

$end_time = microtime(TRUE);

echo PHP_EOL . "Time: " . $end_time - $start_time;

Seperti yang dapat Anda lihat pada output di bawah ini, waktu yang dibutuhkan sekitar 4 detik. Ini dapat bervariasi berdasarkan kekuatan komputasi, memori, dan lain-lain. Tugas kita ini cukup intensif terhadap CPU.

Menggunakan Fork untuk Konkurensi

Sekarang, mari kita tulis kode ini dengan cara yang berbeda menggunakan Fork!

phpCopy code$start_time = microtime(TRUE);

$results = \Spatie\Fork\Fork::new()->run(
    function () {
        return timeConsumingFunction();
    },
    function () {
        return timeConsumingFunction();
    },
    function () {
        return timeConsumingFunction();
    }
);

echo "Result: " . array_sum($results);

$end_time = microtime(TRUE);

echo PHP_EOL . "Time: " . $end_time - $start_time;

Dalam contoh ini, kita menggunakan \Spatie\Fork\Fork yang memungkinkan kita membuat tiga tugas berbeda dan mengagregasi hasil dari masing-masing.

Mari kita lihat hasilnya:

shellCopy codeResult: 300000000
Time: 1.5

Seperti yang Anda lihat, kita telah mengurangi waktu dari 4,3 detik menjadi 1,5 detik 🎉

Apa yang Bisa Dilakukan Selanjutnya?

Saya sangat merekomendasikan untuk memeriksa halaman GitHub spatie/fork. Halaman ini memiliki instruksi yang jelas untuk para pengembang. Saya percaya ini adalah salah satu paket open-source hebat yang dibuat oleh Spatie.

Anda juga harus menonton video ini:

Artikel ini hanya merupakan pengantar sederhana untuk membahas konkurensi di PHP. Masih banyak hal bagus di internet yang saya rekomendasikan untuk dibaca jika Anda menyukai konsep ini.

Semoga harimu menyenangkan!

Terbaru

  • Cara Bikin Aplikasi SaaS Fullstack Sederhana dalam 10 Menit dengan Claude
  • Berapa Lama Verifikasi Dana Premium? Jangan Panik, Ini Penjelasannya!
  • NotebookLM Sekarang Bisa Kustomisasi Slide Presentasi Secara Dinamis
  • Review Lengkap Headset SteelSeries Arctis Nova Elite
  • Cara Cek Bansos Atensi YAPI 2026 dan Jadwal Cairnya!
  • Kenapa 2026 Bakal Jadi Tahun Kejayaan Gaming di Linux? Ini Jawabannya
  • Download Upload DNS dan SPTJM SD-SMP untuk Administrasi TKA 2026
  • Kenapa Disney Matikan Dolby Vision dan HDR10? Ini Penjelasannya
  • Kenapa Bobon Santoso Pensiun Dari Youtube? Ini Alasan Sebenarnya
  • Apakah Bootcamp Hacktiv8 Penipu atau Direkomendasikan?
  • Inilah Estimasi Waktu Pencairan TPG 2026 Sehabis SKTP Muncul di Info GTK
  • Cara Menggunakan openClaw untuk Kebutuhan SEO
  • Apakah Tunjangan Profesi Guru Hangus Karena SKTP Belum Terbit?
  • Cara Tarik Saldo PNM Digi ke Rekening & Daftar: Panduan Lengkap & Terbaru!
  • Apa itu Penipuan Michat Hotel?
  • Yang Baru di Claude 5 Sonnet
  • Tip Jadi Kreator di Pinterest Tahun 2026
  • Cara Jualan Produk Digital Tanpa Harus Capek Promosi Terus-Menerus
  • Rangkuman Strategi Bisnis Baru dari CEO Youtube 2026, Wajib Dibaca Kreator Nih
  • Apa itu Platform WeVerse? Ini Penjelasan Lengkapnya
  • Inilah Cara Mendapatkan 1000 Subscriber Cuma dalam 3 Hari Tanpa Edit Video Sama Sekali
  • Apa itu Shibal Annyeong yang Viral TikTok?
  • Apakah iPhone Inter Aman?
  • Kenapa Gemini AI Bisa Error Saat Membuat Gambar? Ini Penjelasannya!
  • Daftar Akun Moonton via Web Tanpa Aplikasi untuk MLBB
  • Cara Hapus Akun Terabox: Panduan Lengkap dan Aman
  • Khaby Lame’s $957M Digital Identity Deal Explained
  • Cek HP Anak, Apakah Ada Video Viral Cukur Kumis Bawah
  • Jika ATM Terpelanting, Apakah Saldo Aman?
  • Inilah 5 Rekomendasi Smartwatch Terbaik di Bawah Rp1 Jutaan
  • How to Fix Microsoft 365 License Errors 29 & 44 with Simple Steps
  • KDE Linux Nears Beta with 62% Progress, What’s Next?
  • PeaZip 10.9 Released, This is The New Feature
  • Wine 11.2 Released with Faster Debugging and 32-Bit Fixes for Linux Users
  • Microsoft Release Litebox: A Secure Library OS for Developers
  • Inilah Cara Buat Conversation Starter di Claude Project Agar Workflow Kalian Lebih Sat-Set
  • Cara Membuat Knowledge Base Audit untuk Claude Project Agar Dokumen Kalian Nggak Berantakan
  • Cara Ubah Role Definition Menjadi Custom Instructions yang Efektif buat Claude Project
  • Cara Mendefinisikan Role Project Claude Agar Hasilnya Lebih Akurat dan Konsisten
  • Cara Buat AI Asisten Pribadi dengan Teknik RAG
  • Apa itu Spear-Phishing via npm? Ini Pengertian dan Cara Kerjanya yang Makin Licin
  • Apa Itu Predator Spyware? Ini Pengertian dan Kontroversi Penghapusan Sanksinya
  • Mengenal Apa itu TONESHELL: Backdoor Berbahaya dari Kelompok Mustang Panda
  • Siapa itu Kelompok Hacker Silver Fox?
  • Apa itu CVE-2025-52691 SmarterMail? Celah Keamanan Paling Berbahaya Tahun 2025
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ

©2026 emka.web.id | Design: Newspaperly WordPress Theme