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

  • Inilah Syarat dan Cara Pendaftaran IMEI Internasional Mulai Mei 2026
  • Bocoran Spek Samsung Galaxy S27 Ultra Nih, Kamera 3X Hilang + Teknologi AI
  • Inilah Perbedaan Motorola G47 dan Motorola G45, Cuma Kamera 108 Megapiksel Doang?
  • Update Baru Google Gemini: Bisa Bikin File Word, PDF, Excel secara Otomatis
  • Rekomendasi Motor Listrik 2026 Anti Mogok!
  • Ini Loh Honda Vision 110, Motor Baru Seharga Beat & Rangka eSAF Khusus Pasar Eropa
  • Inilah Mobil-Mobil Paling Cocok Transisi ke Bioetanol E20 dan Biodiesel B50!
  • Inilah Ternyata Batas Minimal Daya Cas Mobil Listrik di Rumah
  • DJP Geser Batas Akhir Lapor Pajak Sampai 31 Mei 2026
  • PKB Tanggapi Dingin Usul Yusril Ihza Mahendra Soal Parliamentary Treshold 13 Kursi
  • LPTNU Kritik Keras Rencana Penutupan Prodi: Kenapa Tidak Komprehensi & Berbasis Problematika Nyata?
  • Gus Rozin PWNU Jawa Tengah Setuju Cak Imin, Konflik PBNU bikin Warga Kesal dan Tidak Produktif
  • Pengamat: Prabowo Harus Benahi KAI, Aktifkan juga Jalur Kereta Lama & Baru
  • Sekjend PBNU: Jadwal Muktamar Usulan PWNU Sejalan Hasil Rapat Pleno & Rais Aam
  • PKB Desak Hukuman Maksimal Kasus Little Aresha & Evaluasi Total Sistem Penitipan Anak secara Nasional
  • PKB Usul Modernisasi Sistem Kereta dan CCTV di Kabin Masinis, Setuju?
  • Menteri PPA Arifah Fauzi Minta Maaf Soal Polemik Pindah Gerbong Wanita di KRL
  • Cara Kirim Robux Mudah di Roblox Beli Skin Shirt Preview
  • Kronologi kasus dugaan penyebaran konten asusila oleh anak anggota DPRD Kutai Barat?
  • Inilah Alasan Kenapa Gelembung Air di Luar Angkasa Bisa Jadi Eksperimen Fisika yang Keren Banget
  • Inilah Contoh Naskah Doa Upacara Hardiknas 2026 yang Syahdu dan Penuh Makna
  • Inilah 10 Peringkat SMP di Daerah Istimewa Yogyakarta Berdasarkan Hasil TKA TKAD 2025/2026 Terbaru
  • Inilah Cara Download FF Beta Versi Terbaru 2026, Lengkap Dengan Cara Daftar Advanced Server Resmi
  • Inilah Cara Menghilangkan YouTube Shorts di Beranda Biar Nggak Menghambat Scrolling Kalian!
  • Inilah Kabar Gembira Program Magang Nasional 2026, Kuota Naik Drastis Jadi 150 Ribu Peserta!
  • Inilah House of Amartha: Mengenal Bisnis Thariq Halilintar di Balik Pernikahan Mewah El Rumi dan Syifa Hadju
  • Inilah Cara Kuliah S1-S2-S3 Gratis dan Cepat Lewat Beasiswa BIB Kemenag Jalur Akselerasi 2026
  • Inilah Aturan Baru Penugasan Guru Non-ASN 2026, Nasib Kalian Ditentukan Sampai Tanggal Ini!
  • Inilah Cara Daftar Pra SPMB Banten 2026 Biar Proses Masuk Sekolah Jadi Makin Lancar
  • Inilah Rincian Biaya Jalur Mandiri Untirta 2026 Lengkap Per Fakultas dan Program Studi
  • 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 Transform Your Windows 11 Interface into a Sleek and Modern Aesthetic Masterpiece
  • How to Understand Google’s New TPU 8 Series for Massive AI Training and Inference
  • How to Level Up Your PC Gaming Experience with the New Valve Steam Controller and Its Advanced Features
  • How to build a smart voice agent with the AssemblyAI Voice Agent API and Universal-3 Pro for high-accuracy conversations
  • How to create Cinematic AI Kungfu Movie using Flower.ai and SeaDance 2.0
  • How to Build a Professional Headless Shopify Store from Scratch with the New Shopify AI Toolkit and Claude Code
  • How to Use Nvidia Nemotron-3 Nano Omni for Advanced Multimodal AI Reasoning
  • How to use Google Gemini Deep Research to automate professional analysis and save hours of work every week
  • 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