Apakah ada threading di php?

Setiap kali metode mulai dari kelas Thread dipanggil, kode metode run dapat dieksekusi dalam utas terpisah secara paralel

Sinopsis kelas

Thread extends Threaded implements Countable , Traversable , ArrayAccess {
   /* Methods */
   public void detach [ void ]
   public integer getCreatorId [ void ]
   public static Thread getCurrentThread [ void ]
   public static integer getCurrentThreadId [ void ]
   public integer getThreadId [ void ]
   public static mixed globally [ void ]
   public boolean isJoined [ void ]
   public boolean isStarted [ void ]
   public boolean join [ void ]
   public void kill [ void ]
   public boolean start [[ integer $options ] ]
	
   /* Inherited methods */
   public array Threaded::chunk [ integer $size , boolean $preserve ]
   public integer Threaded::count [ void ]
   public bool Threaded::extend [ string $class ]
   public Threaded Threaded::from [ Closure $run [, Closure $construct [, array $args ]] ]
   public array Threaded::getTerminationInfo [ void ]
   public boolean Threaded::isRunning [ void ]
   public boolean Threaded::isTerminated [ void ]
   public boolean Threaded::isWaiting [ void ]
   public boolean Threaded::lock [ void ]
   public boolean Threaded::merge [ mixed $from [, bool $overwrite ] ]
   public boolean Threaded::notify [ void ]
   public boolean Threaded::notifyOne [ void ]
   public boolean Threaded::pop [ void ]
   public void Threaded::run [ void ]
   public mixed Threaded::shift [ void ]
   public mixed Threaded::synchronized [ Closure $block [, mixed $.. ] ]
   public boolean Threaded::unlock [ void ]
   public boolean Threaded::wait [[ integer $timeout ] ]
}

php_fungsi_referensi. htm

Saat Anda mulai dengan multi-threading di PHP, Anda mungkin mulai dengan membuat kelas Thread dan membuat instance untuk setiap tugas yang perlu Anda lakukan. Tidak apa-apa jika Anda hanya memiliki beberapa tugas, tetapi Anda dapat dengan cepat membebani server Anda jika Anda memiliki banyak tugas. Juga, bahkan jika Anda menjadwalkan utas sehingga tidak semuanya berjalan sekaligus, sangat tidak efisien untuk membuat utas per tugas karena ada overhead dalam membuat dan menghancurkan utas. Jauh lebih efisien untuk menggunakan kembali utas berulang kali untuk menyelesaikan pekerjaan ini. Di sinilah "kumpulan" masuk dan di mana seseorang perlu memisahkan "pekerjaan" [atau pekerjaan/tugas] dari "pekerja" [utas]

Di bawah ini adalah skrip yang mendefinisikan kelas tugas [MyTask] yang dibuat beberapa kali dengan. Setiap kali tugas diberikan daftar angka untuk melakukan perhitungan [$inputs]. Kami kemudian memberi contoh kumpulan utas dan menyerahkan daftar tugas untuk dikerjakan. Kumpulan utas akan bekerja sampai semua pekerjaan selesai, dengan setiap utas di kumpulan mengerjakan satu pekerjaan pada satu waktu. Ketika semua tugas telah selesai, kami mendapatkan semua hasilnya dengan menanyakan hasilnya kepada objek tugas. Kami tidak mencoba mendapatkan kembali data dengan pergi ke kumpulan atau utas

m_inputs = $inputs;
        $this->m_outputs = new Threaded[]; // we will store the results in here.
    }


    public function run[] 
    {
        foreach [$this->m_inputs as $input]
        {
            // casting the array to an array is not a mistake
            // but actually super important for this to work
            // //github.com/krakjoe/pthreads/issues/813#issuecomment-361955116
            $this->m_outputs[] = [array]array[
                'property1' => $input * 2,
                'property2' => [$input + 2],
            ];
        }
    }


    # Accessors
    public function getResults[] { return $this->m_outputs; }
}



function main[]
{
    $inputs = range[0,10000];
    $numInputsPerTask = 20;
    $inputGroups = array_chunk[$inputs, $numInputsPerTask];
    $numCpus = 4; // I would nomrally dynamically fetch this and sometimes large [e.g. aws C5 instances]
    $numTasks = count[$inputGroups];
    $numThreads = min[$numTasks, $numCpus]; // don't need to spawn more threads than tasks.
    $pool = new Pool[$numThreads];
    $tasks = array[]; // collection to hold all the tasks to get the results from afterwards.

    foreach [$inputGroups as $inputsForTask]
    {
        $task = new MyTask[$inputsForTask];
        $tasks[] = $task;
        $pool->submit[$task];
    }


    while [$pool->collect[]];

    # We could submit more stuff here, the Pool is still waiting for work to be submitted.

    $pool->shutdown[];

    # All tasks should have been completed at this point. Get the results!
    $results = array[];
    foreach [$tasks as $task]
    {
        $results[] = $task->getResults[];
    }

    print "results: " . print_r[$results, true];
}

main[];

_

Mendapatkan Jawaban Keluar

Ketika saya pertama kali mulai bekerja dengan utas, saya merasa cukup mudah untuk membuatnya dan membuatnya menampilkan pesan, tetapi saya bingung bagaimana cara mengambil hasil dengan utas utama ketika pekerjaan telah selesai. Ini karena tidak terpikir oleh saya bahwa "pekerjaan" menyimpan informasi tentang parameter pekerjaan dan hasilnya, bukan utasnya. Utas hanya menjalankan pekerjaan, tanpa petunjuk tentang cara kerjanya. Anda dapat menganggap utas sebagai monyet terlatih yang telah diajari memutar engkol, dan pekerjaannya adalah wadah dengan engkol di bagian luar yang dapat diakses monyet. Monyet tidak tahu apa yang terjadi di dalam wadah ketika dia memutar engkol, tetapi semua wadah menyelesaikan pekerjaannya dan mendapatkan hasilnya di dalam. Salah satu wadah mungkin telah mengupas kentang saat engkol diputar, sedangkan yang lain mungkin adalah generator manual yang mengisi baterai

Apakah PHP memiliki threading?

Aplikasi PHP dapat membuat, membaca, menulis, mengeksekusi, dan menyinkronkan dengan objek Threads, Worker, dan Threaded . Ekstensi ini dianggap tidak terawat dan mati. Pertimbangkan untuk menggunakan paralel sebagai gantinya. Ekstensi pthreads tidak dapat digunakan di lingkungan server web.

Apakah PHP menggunakan banyak utas?

Aplikasi PHP, tidak diragukan lagi bekerja secara efektif dengan kemampuan multithreading . Multithreading adalah sesuatu yang mirip dengan multitasking, tetapi memungkinkan untuk memproses banyak pekerjaan sekaligus, bukan pada banyak proses.

Apakah PHP 8 multithreaded?

PHP tidak memberikan fungsionalitas multi-threading bawaan , kita perlu menambahkan "utas" paket/ekstensi ke PHP kita.

Apa itu thread aman PHP?

Apa yang dimaksud dengan keamanan thread saat mengunduh PHP? . Thread Safety bekerja dengan membuat salinan penyimpanan lokal di setiap utas, sehingga data tidak bertabrakan dengan utas lainnya. binary can work in a multithreaded webserver context, such as Apache 2 on Windows. Thread Safety works by creating a local storage copy in each thread, so that the data won't collide with another thread.

Bài mới nhất

Chủ Đề