Multi-Threading pada PHP dengan Bantuan JVM

1 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
Multi-Threading pada PHP dengan JPHP
Photo by Jonathan Chng on Unsplash

TeknoCerdas.com – Salam cerdas untuk kita semua. Java sudah dikenal dari dulu adalah bahasa yang mendukung multi-threading. Dengan multi-threading maka sebuah task dapat berlangsung pada waktu bersamaan. PHP adalah bahasa pemrograman yang hanya mendukung single thread. Untuk implementasi multi-threading pada PHP dapat dilakukan dengan bantuan Java Virtual Machine (JVM). Artinya kode PHP akan diubah ke Javabyte code.

Pada tulian ini mengubah kode PHP menjadi Java bytecode dilakukan dengan bantuan JPHP. Sebuah compiler PHP untuk JVM. Secara otomatis dengan ter-compile sebagai Java bytecode maka PHP dapat memanfaatkan fitur JVM salah satunya multi-threading.

Silahkan merujuk pada artikel link dibawah ini untuk langkah-langkah bagaimana menginstal JPHP pada Linux.

Baca Juga
Menjalankan PHP pada Java Virtual Machine (JVM)

Multi-Threading dengan JPHP

Untuk menggunakan thread pada JPHP dapat digunakan pustaka yang tersedia pada namespace php\lang\Thread. Cara penggunaannya mirip dengan yang ada di Java.

Berikut ini adalah contoh kode multi-threading sederhana memanfaatkan pustaka yang disediakan JPHP.

Kita inisialisasi terlebih dulu sebuah project baru.

$ mkdir jphp-thread && cd jphp-thread
$ jppm init

Isikan saja semuanya secara default pada prompt yang tampil. Kemudian Edit file src/index.php dan sesuaikan kodenya seperti berikut.

use php\lang\Thread;

$t1 = new Thread(function() {
    // Simulate a task which took 2 seconds
    Thread::sleep(2000);
    echo "Thread #1 sleep for 2 secs.\n";
});
$t1->start();

$t2 = new Thread(function() {
    // Simulate a task which took half a second
    Thread::sleep(500);
    echo "Thread #2 sleep for 0.5 secs.\n";
});
$t2->start();

echo "Hello World.\n";

Ketika dijalankan output yang dihasilkan akan seperti dibawah.

$ jppm start
Hello World.
Thread #2 sleep for 0.5 secs.
Thread #1 sleep for 2 secs.

Dapat terlihat jika kode dieksekusi secara bersamaan dan tidak secara seri atau berurutan.

Statement echo "Hello World\n" menjadi nomor satu karena prosesnya sangat cepat sehingga CPU akan mengeksekusinya pertama kali. Statement tersebut berada pada main Thread.

Kemudian kita membuat dua Thread baru yatu Thread 1 dan Thread 2. Thread 1 disimulasikan sebuah task yang cukup berat yaitu selesai dalam waktu 2 detik.

Secara bersamaan Thread 2 juga dimulai dan tasknya butuh waktu lebih cepat dari Thread 1 yaitu hanya 0.5 detik sehingga statemen pada Thread 2 yang dieksekusi terlebih dahulu oleh CPU yang menghasilkan output seperti diatas.