Penggunaan fungsi PARALLEL pada PHP

B. Wilkinson and M. Allen, Parallel Programming Techniques & Applications Using Networked Workstations and Parallel Computers, 2nd edition, Pearson Education, Inc., 2004.

T. Maryanto, “Aplikasi High Performance Computing H. El-Rewini and M. Abd-El-Barr, Advanced Computer

Architecture and Parallel Processing, New Jersey : John Wiley & Sons, Inc., 2005.

D. Taniar, C. H. C. Leung, W. Rahayu, S. Goel, High-Performance Parallel Database Processing and Grid Databases, John Wiley & Sons, Inc., 2008.

E. Utami and S. Raharjo, “Koneksi Database PostgreSQL dengan Bahasa C menggunakan Embedded SQL,” 2003.

D. Setiadi, “Parallel Database dengan menggunakan MySQL Cluster sebagai High Availability Database dan Load Balancing Transaction,” Yogyakarta : Universitas Gadjah Mada, 2007.

MPI Forum, MPI : A Message Passing Interface Standard Version 2.1, Tennessee : University of Tennessee, 2008.

A. Bustamam, H. Suhartanto, T. Basaruddin, “Implementasi Metode Iteratif Paralel Implisit Multistep Runge-Kutta pada Sistem Paralel MPI-Linux,” in Proc. Lokakarya Komputasi dalam Sains dan Teknologi NuklirXIII BATAN, July 3-4, 2002.

N. MacDonald, E. Minty, J. Malard, T. Harding, S. Brown, M. Antonioletti, Writing Message Passing Parallel Programs with MPI, Edinburgh Parallel Computing Centre, Edinburgh : The University of Edinburgh, 1995.

Krisnawati, “Implementasi Interpolasi Lagrange untuk Prediksi Nilai Data Berpasangan dengan Menggunakan Matlab,” in Proc. Seminar Nasional Teknologi, November 24, 2007.

REFERENCES

K. Ganeshamoorthy and D. N. Ranasinghe, "On the Performance of Parallel Neural Network Implementations on Distributed Memory Architectures," in Cluster Computing and the Grid, 2008. CCGRID '08. 8th IEEE International Symposium on, Lyon, 2008.

R. Gu, F. Shen and Y. Huang, "A Parallel Computing Platform for Training Large Scale Neural Networks," in Big Data, 2013 IEEE International Conference on, Silicon Valley, CA, 2013.

M. Moreira and E. Fiesler, "Neural Nerworks with Adaptive Learning Rate and Momentum Terms," IDIAP Technical Report, 1995.

J. Torresen, Parallelization of Backpropagation Training fo Feed - Forward Neural Networks, Norwegian: The University of Trondheim, 1996.

M. Riedmiller and H. Braun, "A Direct Adaptive Method for Faster Backpropagation Learning : The RPROP Algorithm," in IEEE International Conference, San Francisco, CA, 1993.

S. A. Halim, A. Ahmad, N. M. Noh, M. S. B. M. A. Safudin and R. Ahmad, "A Comparative Study between Standard Back Propagation and Resilient Propagation," in IT in Medicine and Education (ITME), 2011 International Symposium on, Cuangzhou, 2011.

N. Prasad, R. Singh and S. P. Lal, "Comparison of Back Propagation and Resilient Propagation Algorithm for Spam Classification," in 2013 Fifth International Conference on Computational Intelligence, Modelling and Simulation, Seoul, 2013.

J. Stubbemann, O. Kramer and N. A. Treiber, "Resilient Propagation for Multivariate Wind Power Prediction," 2015. [Online]. Available: http://www.researchgate.net/profile/Oliver_Kramer2/publication/268966338_Resilient_Propagation_for_Multivariate_Wind_Power_Prediction/links/55360e290cf20ea35f10f924.pdf.

Ini adalah indeks artikel untuk tutorial PHP lanjutan (advance). Pada artikel-artikel dibawah ini ditulis mengenai pemrograman PHP tingkat lanjut tentang pemahaman fungsi-fungsi untuk menangani tanggal dan waktu, fungsi untuk menangani string, fungsi include, menangani file, proses upload file dan beberapa artikel lain tentang pemrograman PHP lanjutan.

Dengan artikel-artikel dibawah ini diharapkan dapat lebih menguasai teknik-teknik pemrograman PHP secara luas untuk kemudian menuju tingkatan penerapan program PHP.

Berikut ini beberapa artikel tutorial PHP Lanjutan :

  1. Fungsi-fungsi PHP Untuk Menangani Tanggal dan Waktu
  2. Fungsi-fungsi PHP Untuk Menangani String
  3. Memahami Fungsi Include dan Require Pada PHP
  4. Memahami Fungsi Include_once dan Require_once
  5. Fungsi-fungsi PHP Untuk Menangani File
  6. Membaca File Teks Dengan Fungsi Readfile Pada PHP
  7. Cara Membuka dan Menutup File Pada PHP
  8. Cara Mengambil Text Dari File Dengan PHP
  9. Cara Menggunakan Input Type File Pada PHP
  10. Cara Menulis Ke Dalam File Dengan PHP
  11. Cara Mengupload File Ke Server Dengan PHP
  12. Membuat dan Menghapus Direktori dengan PHP
  13. Membuka dan Menampilkan Isi Direktori dengan PHP
  14. Mengenal Session Pada PHP dan Cara Menggunakannya
  15. Mengenal Cookies pada PHP dan Cara Menggunakannya
  16. Penanganan Error pada PHP
  17. Penanganan Exception pada PHP
  18. Cara Menggunakan PHP Filter
  19. Fungsi-fungsi PHP untuk Array
  20. Fungsi-fungsi Pembulatan Angka pada PHP
  21. Membuat Fungsi Pembulatan Sendiri pada PHP
  22. Konversi Tanggal MySQL

Note : Silahkan klik pada judul untuk membaca artikel

Demikian beberapa artikel tutorial PHP Lanjutan, semoga bermanfaat.

Abdullah, D., 2016. Pemrosesan Paralel. s.l.:Unimal Press.

Alpaydin, E., 2014. Introduction to Machine Learning. Dalam: Introduction to Machine Learning. s.l.:s.n., pp. 105-128.

Annas, M., 2017. Studi Komputasi Paralel dan Implementasinya pada Kasus Komputasi Matriks Besar.

Deswal, M. & Sharma, N., 2014. A Fast HSV Image Color and Texture Detection and Image Conversion Algorithm. International Journal of Science and Research (IJSR), 3(6).

E Silva, L. M. & Buyya, R., 1999. Parallel Programming Models and Paradigms.

Fatta, H. A., 2007. Analisis Perancangan Sistem Informasi untuk Keunggulan Bersaing Perusahaan san Organisasi Modern. s.l.:s.n.

Freund, Y. & Schapire, R. E., 1999. A Short Introduction to Boosting.

Harjono, M., 2014. Algoritma Sieve of Eratosthenes Paralel Berbasis MPI pada Sistem Komputasi Paralel In-Grid.

Kurniawan, D. & Supriyanto, C., 2013. Optimasi Algoritma Support Vector Machine (SVM) Menggunakan AdaBoost untuk Penilaian Resiko Kredit. Jurnal Teknologi Informasi, Volume 9.

Mulya, M. & Abdiansah, 2013. Penerapan Multi-Threading untuk Meningkatkan Kinerja Pengolahan Citra Digital. Jurnal Generic.

Novandi, P., 2015. Analisis Kompleksitas Algoritma Pencarian Convex Hull pada Bidang Planar.

Putra, M. P. K., 2017. Deteksi Bola Multi-Pola Memanfaatkan Ekstraksi Fitur Local Binary Pattern (LBP) Dengan Algoritma Learning Adaboost (Studi Kasus Kontes Robot Sepak Bola Indonesia Humanoid).

Riska, S. Y., Cahyani, L. & Rosadi, M. I., 2014. Klasifikasi Jenis Tanaman Mangga Gadung dan Mangga Madu Berdasarkan Tulang Daun.

Ruan, C., Ruan, Q. & Li, X., 2010. Real AdaBoost Feature Selection for Face Recognition. ICSP.

Sudarisman, D., 2015. Deteksi Bola Pada Robot Krakatau FC.

Suharini, Y. S., 2014. Arsitektur Program Paralel Berbasis Message-Passing Interface. ISSN: 1979-276x.

Susmikanti, M. & Dewayatna, W., 2012. Komputasi Paralel EigenValue dalam Penyelesaian Difusi Multi-Grup Menggunakan Metode HouseHolder Deflasi dan Divide Conquer.

Swahn, H., 2016. Pthreads and OpenMP.

Syaifullah, I. H., 2014. Implementasi Pemrosesan Paralel Pada Permainan Catur Di Cluster Beowulf.

Triatmoko, A. H., Pramono, S. H. & Dahlan, H. S., 2014. Penggunaan Metode Viola-Jones dan Algoritma Eigen Eyes dalam Sistem Kehadiran Pegawai. EECCIS , Volume 8.

Wibowo, A., 2014. Penyelesaian Problem Gaussian Elimination Menggunakan Posix Thread, OpenMP dan Intel TBB. ISSN: 2085-3858, Volume Vol.6, no. 2, 2014, 166-170.


Apakah ada cara realistis untuk mengimplementasikan model multi-threaded di PHP baik benar, atau hanya mensimulasikannya. Beberapa waktu lalu disarankan agar Anda dapat memaksa sistem operasi untuk memuat contoh lain dari executable PHP dan menangani proses simultan lainnya.

Masalah dengan ini adalah bahwa ketika kode PHP selesai mengeksekusi instance PHP tetap ada dalam memori karena tidak ada cara untuk membunuhnya dari dalam PHP. Jadi jika Anda mensimulasikan beberapa utas, Anda dapat membayangkan apa yang akan terjadi. Jadi saya masih mencari cara multi-threading dapat dilakukan atau disimulasikan secara efektif dari dalam PHP. Ada ide?






Jawaban:


Multi-threading dimungkinkan dalam php

Ya, Anda bisa melakukan multi-threading dalam PHP dengan pthreads

Dari dokumentasi PHP :

pthreads adalah API berorientasi objek yang menyediakan semua alat yang diperlukan untuk multi-threading di PHP. Aplikasi PHP dapat membuat, membaca, menulis, menjalankan dan menyinkronkan dengan Thread, Pekerja dan objek Thread.

Peringatan : Ekstensi pthreads tidak dapat digunakan di lingkungan server web. Threading dalam PHP karena itu harus tetap hanya untuk aplikasi berbasis CLI.

Tes sederhana

#!/usr/bin/php
<?php
class AsyncOperation extends Thread {

    public function __construct($arg) {
        $this->arg = $arg;
    }

    public function run() {
        if ($this->arg) {
            $sleep = mt_rand(1, 10);
            printf('%s: %s  -start -sleeps %d' . "\n", date("g:i:sa"), $this->arg, $sleep);
            sleep($sleep);
            printf('%s: %s  -finish' . "\n", date("g:i:sa"), $this->arg);
        }
    }
}

// Create a array
$stack = array();

//Initiate Multiple Thread
foreach ( range("A", "D") as $i ) {
    $stack[] = new AsyncOperation($i);
}

// Start The Threads
foreach ( $stack as $t ) {
    $t->start();
}

?>

Lari pertama

12:00:06pm:     A  -start -sleeps 5
12:00:06pm:     B  -start -sleeps 3
12:00:06pm:     C  -start -sleeps 10
12:00:06pm:     D  -start -sleeps 2
12:00:08pm:     D  -finish
12:00:09pm:     B  -finish
12:00:11pm:     A  -finish
12:00:16pm:     C  -finish

Jalankan Kedua

12:01:36pm:     A  -start -sleeps 6
12:01:36pm:     B  -start -sleeps 1
12:01:36pm:     C  -start -sleeps 2
12:01:36pm:     D  -start -sleeps 1
12:01:37pm:     B  -finish
12:01:37pm:     D  -finish
12:01:38pm:     C  -finish
12:01:42pm:     A  -finish

Contoh Dunia Nyata

error_reporting(E_ALL);
class AsyncWebRequest extends Thread {
    public $url;
    public $data;

    public function __construct($url) {
        $this->url = $url;
    }

    public function run() {
        if (($url = $this->url)) {
            /*
             * If a large amount of data is being requested, you might want to
             * fsockopen and read using usleep in between reads
             */
            $this->data = file_get_contents($url);
        } else
            printf("Thread #%lu was not provided a URL\n", $this->getThreadId());
    }
}

$t = microtime(true);
$g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10));
/* starting synchronization */
if ($g->start()) {
    printf("Request took %f seconds to start ", microtime(true) - $t);
    while ( $g->isRunning() ) {
        echo ".";
        usleep(100);
    }
    if ($g->join()) {
        printf(" and %f seconds to finish receiving %d bytes\n", microtime(true) - $t, strlen($g->data));
    } else
        printf(" and %f seconds to finish, request failed\n", microtime(true) - $t);
}






kenapa kamu tidak menggunakan popen ?

for ($i=0; $i<10; $i++) {
    // open ten processes
    for ($j=0; $j<10; $j++) {
        $pipe[$j] = popen('script2.php', 'w');
    }

    // wait for them to finish
    for ($j=0; $j<10; ++$j) {
        pclose($pipe[$j]);
    }
}






Threading tidak tersedia dalam stok PHP, tetapi pemrograman bersamaan dimungkinkan dengan menggunakan permintaan HTTP sebagai panggilan asinkron.

Dengan pengaturan batas waktu curl diatur ke 1 dan menggunakan session_id yang sama untuk proses yang Anda ingin dikaitkan satu sama lain, Anda dapat berkomunikasi dengan variabel sesi seperti dalam contoh saya di bawah ini. Dengan metode ini Anda bahkan dapat menutup browser Anda dan proses bersamaan masih ada di server.

Jangan lupa untuk memverifikasi ID sesi yang benar seperti ini:

http: //localhost/test/verifysession.php? sessionid = [ id yang benar]

startprocess.php

$request = "http://localhost/test/process1.php?sessionid=".$_REQUEST["PHPSESSID"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_exec($ch);
curl_close($ch);
echo $_REQUEST["PHPSESSID"];

process1.php

set_time_limit(0);

if ($_REQUEST["sessionid"])
   session_id($_REQUEST["sessionid"]);

function checkclose()
{
   global $_SESSION;
   if ($_SESSION["closesession"])
   {
       unset($_SESSION["closesession"]);
       die();
   }
}

while(!$close)
{
   session_start();
   $_SESSION["test"] = rand();
   checkclose();
   session_write_close();
   sleep(5);
}

verifysession.php

if ($_REQUEST["sessionid"])
    session_id($_REQUEST["sessionid"]);

session_start();
var_dump($_SESSION);

closeprocess.php

if ($_REQUEST["sessionid"])
    session_id($_REQUEST["sessionid"]);

session_start();
$_SESSION["closesession"] = true;
var_dump($_SESSION);




Meskipun Anda tidak dapat utas, Anda memiliki beberapa tingkat kendali proses di php. Dua set fungsi yang berguna di sini adalah:

Fungsi kontrol proses http://www.php.net/manual/en/ref.pcntl.php

Fungsi POSIX http://www.php.net/manual/en/ref.posix.php

Anda dapat melakukan proses fork dengan pcntl_fork - mengembalikan PID anak. Kemudian Anda dapat menggunakan posix_kill untuk menolak PID itu.

Yang mengatakan, jika Anda membunuh proses orang tua sinyal harus dikirim ke proses anak mengatakan itu untuk mati. Jika php sendiri tidak mengenali ini, Anda bisa mendaftarkan fungsi untuk mengelolanya dan melakukan jalan keluar yang bersih menggunakan pcntl_signal.





Saya tahu ini adalah pertanyaan lama tetapi bagi orang yang mencari, ada ekstensi PECL yang ditulis dalam C yang memberikan kemampuan multi-threading PHP sekarang, itu terletak di sini https://github.com/krakjoe/pthreads



Anda dapat menggunakan exec () untuk menjalankan skrip baris perintah (seperti php baris perintah), dan jika Anda mengirim output ke file, skrip Anda tidak akan menunggu perintah selesai.

Saya tidak begitu ingat sintaks php CLI, tetapi Anda menginginkan sesuatu seperti:

exec("/path/to/php -f '/path/to/file.php' | '/path/to/output.txt'");

Saya pikir beberapa server hosting bersama memiliki exec () dinonaktifkan secara default untuk alasan keamanan, tetapi mungkin patut dicoba.


Anda bisa mensimulasikan threading. PHP dapat menjalankan proses latar belakang melalui popen (atau proc_open). Proses-proses tersebut dapat dikomunikasikan melalui stdin dan stdout. Tentu saja proses itu sendiri dapat menjadi program php. Itu mungkin sedekat yang Anda dapatkan.


Bergantung pada apa yang Anda coba lakukan, Anda juga bisa menggunakan curl_multi untuk mencapainya.


Saya tahu ini sudah terlalu tua, tetapi Anda dapat melihat http://phpthreadlib.sourceforge.net/

Ini mendukung komunikasi dua arah yang bersifat dua arah dan juga memiliki perlindungan untuk membunuh anak-anak (mencegah anak yatim).


Anda dapat memiliki opsi:

  1. multi_curl
  2. Seseorang dapat menggunakan perintah sistem untuk hal yang sama
  3. Skenario ideal adalah, buat fungsi threading dalam bahasa C dan kompilasi / konfigurasikan dalam PHP. Sekarang fungsi itu akan menjadi fungsi PHP.

Kelas Thread tersedia sejak PECL pthreads ≥ 2.0.0.




Bagaimana dengan pcntl_fork?

lihat halaman manual kami untuk contoh: PHP pcntl_fork

<?php

    $pid = pcntl_fork();
    if ($pid == -1) {
        die('could not fork');
    } else if ($pid) {
        // we are the parent
        pcntl_wait($status); //Protect against Zombie children
    } else {
        // we are the child
    }

?>

pcntl_forktidak akan berfungsi di lingkungan server web jika telah mengaktifkan mode aman . Dalam hal ini, itu hanya akan berfungsi dalam versi PHP CLI.


Jika Anda menggunakan server Linux, Anda dapat menggunakan

exec("nohup $php_path path/script.php > /dev/null 2>/dev/null &")

Jika Anda perlu melewati beberapa argumen

exec("nohup $php_path path/script.php $args > /dev/null 2>/dev/null &")

Di script.php

$args = $argv[1];

Atau gunakan Symfony https://symfony.com/doc/current/components/process.html

$process = Process::fromShellCommandline("php ".base_path('script.php'));
$process->setTimeout(0);     
$process->disableOutput();     
$process->start();

Pada penulisan komentar saya saat ini, saya tidak tahu tentang utas-utas PHP. Saya datang untuk mencari sendiri jawabannya di sini, tetapi satu solusi adalah bahwa program PHP yang menerima permintaan dari server web mendelegasikan seluruh jawaban formulasi ke aplikasi konsol yang menyimpan outputnya, jawaban atas permintaan, ke file biner dan program PHP yang meluncurkan aplikasi konsol mengembalikan file biner byte-by-byte sebagai jawaban atas permintaan yang diterima. Aplikasi konsol dapat ditulis dalam bahasa pemrograman apa pun yang berjalan di server, termasuk yang memiliki dukungan threading yang tepat, termasuk program C ++ yang menggunakan OpenMP.

Satu trik yang tidak dapat diandalkan, kotor, adalah menggunakan PHP untuk menjalankan aplikasi konsol, "tidak sama",

uname -a

dan cetak output dari perintah konsol itu ke output HTML untuk mengetahui versi yang tepat dari perangkat lunak server. Kemudian instal versi perangkat lunak yang sama persis ke instance VirtualBox, kompilasi / kumpulkan biner apa pun yang sepenuhnya mandiri, lebih disukai statis, yang diinginkan dan kemudian unggah ke server. Sejak saat itu dan seterusnya aplikasi PHP dapat menggunakan binari-binari tersebut dalam peran aplikasi konsol yang memiliki multi-threading yang tepat. Ini adalah solusi yang kotor, tidak dapat diandalkan, solusi untuk suatu situasi, ketika administrator server belum menginstal semua implementasi bahasa pemrograman yang diperlukan ke server. Hal yang harus diperhatikan adalah bahwa pada setiap permintaan aplikasi PHP menerima aplikasi konsol berakhir / keluar / get_killed.

Mengenai apa yang dipikirkan oleh administrator layanan hosting tentang pola penggunaan server seperti itu, saya kira itu bermuara pada budaya. Di Eropa Utara penyedia layanan HARUS MEMBERIKAN APA YANG DI IKLAN dan jika eksekusi perintah konsol diizinkan dan mengunggah file non-malware diizinkan dan penyedia layanan memiliki hak untuk membunuh proses server apa pun setelah beberapa menit atau bahkan setelah 30 detik , maka administrator layanan hosting tidak memiliki argumen untuk membentuk keluhan yang tepat. Di Amerika Serikat dan Eropa Barat situasi / budaya sangat berbeda dan saya percaya bahwa ada peluang besar bahwa di AS dan / atau Eropa Barat penyedia layanan hosting akan menolak untuk melayani klien layanan hosting yang menggunakan trik yang dijelaskan di atas. Itu hanya tebakan saya, mengingat pengalaman pribadi saya dengan AS layanan hosting dan memberikan apa yang saya dengar dari orang lain tentang layanan hosting Eropa Barat. Pada saat menulis komentar saya saat ini (2018_09_01) saya tidak tahu apa-apa tentang norma-norma budaya penyedia layanan hosting Eropa Selatan, administrator jaringan Eropa Selatan.


Mungkin saya melewatkan sesuatu tetapi exec tidak bekerja sebagai tidak sinkron untuk saya di lingkungan windows yang saya gunakan berikut di windows dan itu bekerja seperti pesona;)

$script_exec = "c:/php/php.exe c:/path/my_ascyn_script.php";

pclose(popen("start /B ". $script_exec, "r"));


Multithreading berarti melakukan banyak tugas atau proses secara bersamaan, kita dapat mencapai hal ini dalam php dengan menggunakan kode berikut, meskipun tidak ada cara langsung untuk mencapai multithreading di php tetapi kita dapat mencapai hasil yang hampir sama dengan mengikuti cara.

chdir(dirname(__FILE__));  //if you want to run this file as cron job
 for ($i = 0; $i < 2; $i += 1){
 exec("php test_1.php $i > test.txt &");
 //this will execute test_1.php and will leave this process executing in the background and will go         

 //to next iteration of the loop immediately without waiting the completion of the script in the   

 //test_1.php , $i  is passed as argument .

}

Test_1.php

$conn=mysql_connect($host,$user,$pass);
$db=mysql_select_db($db);
$i = $argv[1];  //this is the argument passed from index.php file
for($j = 0;$j<5000; $j ++)
{
mysql_query("insert  into  test   set

                id='$i',

                comment='test',

                datetime=NOW() ");

}

Ini akan menjalankan test_1.php dua kali secara bersamaan dan kedua proses akan berjalan di latar belakang secara bersamaan, sehingga dengan cara ini Anda dapat mencapai multithreading di php.

Orang ini melakukan pekerjaan yang sangat baik Multithreading di php