This content originally appeared on DEV Community and was authored by ASTOMO PANCORO PUTRO
Bahasa pemrograman PHP terkenal melakukan proses yang bersifat blocking, yakni sumber daya tidak dapat dipakai untuk keperluan lain sampai proses selesai. Namun di versi 8.* ada peningkatan fitur yang memungkinkan developer untuk menghentikan proses dan menjalankannya kembali kapan saja.
Mengenal Fiber
Fiber merupakan suatu class di PHP yang berguna untuk menjalankan proses yang dapat dihentikan (suspend) dan dijalankan kembali (resume) kapan saja sesuai kebutuhan. Konsep Fiber ini mirip dengan async di Javascript namun dengan perbedaan, proses di dalam Fiber secara default hanya bisa resume satu kali saja. Berikut ini cara mendefinisikan Fiber.
<?php
$timer = new Fiber(function($argument){
$value = Fiber::suspend("your message");
echo $value;
});
Di dalam instance Fiber ada sebuah callback yang dapat menerima argumen. Di dalam callback, ada pemanggilan method static suspend()
yang akan langsung menghentikan proses dan mengembalikan pesan di argumen method ini.
Mengontrol Fiber
Untuk memulai Fiber caranya sbb.
<?php
$response = $timer->start("message");
echo $response;
Method start()
akan memulai Fiber dalam kondisi berhenti (suspended), memasukkan nilai argumen nya sebagai argumen callback Fiber, dan menangkap nilai dari argumen method suspend()
. Untuk menjalankan kembali Fiber cara nya sbb.
<?php
while(!$timer->isTerminated()){
$timer->resume("message");
}
Di sini digunakan infinity loop while yang akan berhenti saat kondisi Fiber mati (terminated) sambil memanggil method resume()
. Argumen method ini akan dikembalikan oleh method suspend()
dan bisa ditampilkan setiap iterasi selama Fiber belum mati. Secara umum proses Fiber dapat dilihat pada flow chart berikut.
Gbr 1. Diagram alir proses Fiber di PHP
Contoh Koding Fiber dan Penjelasan nya
Pada gambar di atas bisa kita pecah menjadi 3 bagian. Bagian pertama ada definisi Fiber. Pada definisi ini terdapat sebuah loop for yang panjang nya dibatasi oleh argument callback. Di dalam loop for terdapat function sleep()
yang berguna untuk menunda eksekusi Fiber selama 30 detik. Selanjutnya perintah Fiber::suspend()
akan otomatis menghentikan Fiber saat dijalankan pertama kali. Secara default, method suspend()
ini akan menampilkan pesan dari argumen nya saat dijalankan pertama kali lalu akan terminate. Namun looping for bisa digunakan untuk menunda terminate selama belum mencapai akhir loop.
Bagian kedua merupakan perintah untuk menjalankan Fiber pertama kali. Dalam hal ini digunakan method start()
. Argumen method ini akan diterima oleh callback, sementara method ini akan menerima pesan dari Fiber::suspend()
. Setelah pesan diterima, defaultnya Fiber akan terminate.
Bagian ketiga merupakan suatu infinity loop while. Selama Fiber tidak mengirim sinyal terminate, maka status Fiber::isTerminated
akan false sehingga loop terus berjalan. Di dalam loop terdapat perintah resume()
. Argumen dari perintah ini akan diterima oleh Fiber setelah suspend()
. Karena itulah argumen resume()
hanya berisi current timestamp. Berikut ini adalah hasil akhir dari proses Fiber di PHP.
Gbr 3. Hasil akhir proses Fiber di PHP yang dijalankan lewat terminal
This content originally appeared on DEV Community and was authored by ASTOMO PANCORO PUTRO