Rumah > Artikel > pembangunan bahagian belakang > Terokai teknik pengaturcaraan tak segerak untuk persilangan tatasusunan PHP dan pengiraan kesatuan
Menggunakan coroutine dan Promise, pengaturcaraan tak segerak PHP boleh menyelesaikan masalah kecekapan pengiraan persilangan tatasusunan dan kesatuan. Model konkurensi ringan coroutine membenarkan penggantungan dan menyambung semula pelaksanaan fungsi, manakala mekanisme Promise digunakan untuk mengurus tugas tak segerak. Artikel ini menyediakan dua contoh fungsi: array_intersect_async menggunakan Promiseany untuk mengira persimpangan secara tak segerak, mengenal pasti nilai pertama yang turut terdapat dalam tatasusunan kedua. array_union_async menggunakan Promiseall untuk mengira kesatuan secara tak segerak, mengenal pasti nilai yang terdapat dalam tatasusunan pertama tetapi tidak dalam tatasusunan kedua. . Artikel ini akan meneroka cara menggunakan coroutine PHP dan mekanisme Janji untuk mengira persimpangan dan kesatuan tatasusunan secara tak segerak.
Coroutines
Coroutines ialah model pelaksanaan serentak ringan yang membolehkan fungsi menjeda dan menyambung semula pelaksanaan kemudian. PHP menyediakan pustaka coroutine yang dipanggil amphp, yang boleh kita gunakan untuk melaksanakan tugas secara tak segerak tanpa menyekat proses utama.
Menggunakan coroutine untuk mengira persimpangan tatasusunan secara tak segerak
use Amp\Parallel\Worker; use Amp\Promise; function array_intersect_async(array $arr1, array $arr2): Promise { $promises = []; foreach ($arr1 as $value) { $promises[] = new Worker(function () use ($value, $arr2) { return in_array($value, $arr2); }); } return Promise\any($promises); } $arr1 = [1, 2, 3, 4, 5]; $arr2 = [3, 4, 5, 6, 7]; array_intersect_async($arr1, $arr2)->onResolve(function ($result) { var_dump($result); });Menggunakan coroutine untuk mengira kesatuan tatasusunan secara tak segerak
function array_union_async(array $arr1, array $arr2): Promise { $promises = []; foreach ($arr1 as $value) { $promises[] = new Worker(function () use ($value, $arr2) { return !in_array($value, $arr2); }); } return Promise\all($promises); } $arr1 = [1, 2, 3, 4, 5]; $arr2 = [3, 4, 5, 6, 7]; array_union_async($arr1, $arr2)->onResolve(function ($results) { $result = array_diff($arr1, $results); var_dump($result); });
dalam kes praktikal pemprosesan sebenar boleh digunakan set, contohnya :
Bandingkan maklumat bertindih dalam senarai pengguna
Agregat data daripada sumber data yang berbezaCari persamaan antara dua koleksi teks
Pengaturcaraan tak segerak boleh mengurangkan dengan ketara masa yang diperlukan untuk mengendalikan aplikasi tugasan ini, dengan itu meningkatkan daya tindak balas dan melalui aplikasi tugasan ini
Atas ialah kandungan terperinci Terokai teknik pengaturcaraan tak segerak untuk persilangan tatasusunan PHP dan pengiraan kesatuan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!