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

  • Survei Parpol Terbaru: Gerindra Unggul, PDIP Ketiga, PKB 5%
  • PKB Resmi Jalin Kerjasama dengan Institut Teknologi & Sains NU Kalimantan
  • Inilah Urutan Terbaru Pangkat TNI Angkatan Darat! (Update 2026)
  • Inilah Panduan Lengkap Operator Sekolah Mengelola SPTJM e-Ijazah dan Menghindari Kesalahan Fatal Data Kelulusan
  • Inilah Syarat dan Penilaian Seleksi Siswa Unggul ITB Jalur UTBK
  • Download Video Viral Guru Bahasa Inggris? Awas Berisi Virus!
  • PKB Minta Kasus C4bul Pendiri Ponpes Pati Tidak Ada Ampunan & Tuntutan Maksimal
  • Inilah Kronologi Video Viral Preman vs Sopir Di Sumedang
  • Ini Alasan UKP Pariwisata Disindir Konten Kreator Drone Gunung Rinjani
  • Inilah Kronologi Viral Video Dugaan Asusila Pegawai Disdik Pasuruan di Mobil Dinas
  • Polisi Polda Sumut Resmi Dipecat: Dari Video Viral Sampai Sidang Etik Ini Kronologinya
  • ASUS ExpertBook Ultra: Produk Flagship yang Cerminkan Kepemimpinan ASUS di Pasar Global
  • Inilah Tahapan dan Syarat Pendaftaran Beasiswa Garuda 2026 Gelombang II (25 Mei – 25 Juni 2026)
  • Ini Maksud Soal Tugas Guru Non-ASN Berakhir 2027!
  • Apa Itu Siscamling? Inilah Cara Mengaktifkan Paket Anti Spam Telkomsel
  • Sah, Nilai TKA Jadi Salah Satu Komponen Seleksi Siswa SPMB Secara Nasional 2026
  • Inilah 3 Lagi Pinjol Ilegal Menurut OJK Tahun 2026
  • Cara Login Proktor Browser OSN Mode Online, Uji Coba OSN Semua Jenjang Terbaru
  • Inilah Link Web Komunikasi OSN 2026 anbk.kemendikdasmen.go.id/osnk ANBK Kemendikdasmen untuk Simulasi
  • Inilah Jadwal Pembagian Deviden BBRI 2026, Siap-siap!
  • Ini Alasan Kenapa Followers IG Berkurang Sendiri Mei 2026?
  • Panduan Download vhd-osnk-2025_fresh versi 29.25.5.0 untuk Uji Coba OSN-K SMA SMP Sederajat 2026
  • Iniloh Syarat dan Komponen Nilai Seleksi Siswa Unggul ITB Jalur Nilai Rapor 2026/2027
  • Inilah Syarat dan Prosedur Ikut Seleksi Siswa Unggul ITB Jalur Tes Tulis 2026/2027
  • Inilah Kronologi & Latar Belakang Kasus Erin Taulany vs ART Hera: Masalah Facebook Pro?
  • Inilah Alasan Kenapa Ending Film Children of Heaven diubah di Indonesia
  • Ini Alasan Hanny Kristianto Cabut Sertifikat Mualaf Richard Lee
  • Inilah Syarat Dokumen SSU ITB 2024-2026 yang Wajib Kalian Siapkan Supaya Nggak Gagal Seleksi Administrasi
  • Inilah Episyrphus Balteatus, Lalat Unik Penyamar yang Sangat Bermanfaat bagi Taman Kalian
  • Inilah Cara Lolos Seleksi Siswa Unggul ITB Lewat Jalur Tes Tulis Biar Jadi Mahasiswa Ganesha
  • How to build a high-performance private photo cloud with Immich and TrueNAS SCALE
  • How to Build an Endgame Local AI Agent Setup Using an 8-Node NVIDIA Cluster with 1TB Memory
  • How to Master Windows Event Logs to Level Up Your Cybersecurity Investigations and SOC Career
  • How to Build Ultra-Resilient Databases with Amazon Aurora Global Database and RDS Proxy for Maximum Uptime and Performance
  • How to Build Real-Time Personalization Systems Using AWS Agentic AI to Make Every User Feel Special
  • How to utilize Hermes Agent V0.13 Tenacity Release to build a fully autonomous AI workforce for your personal projects
  • ChatGPT 5.5 Memory Update is Insane! Here’s the Tutorial
  • How to Write Super Fast GPU Kernels in Python Using CUTLASS and JAX for Your Deep Learning Projects
  • How to set up OpenClaw and build your own local AI assistant plugins with ease
  • How to Create Stunning Cinematic AI Videos Using the New Higgsfield Canvas Node-Based Architecture
  • 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

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