Rumah >pembangunan bahagian belakang >tutorial php >Terokai teknik pengaturcaraan tak segerak untuk persilangan tatasusunan PHP dan pengiraan kesatuan

Terokai teknik pengaturcaraan tak segerak untuk persilangan tatasusunan PHP dan pengiraan kesatuan

WBOY
WBOYasal
2024-05-02 08:03:011012semak imbas

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.

Terokai teknik pengaturcaraan tak segerak untuk persilangan tatasusunan PHP dan pengiraan kesatuanCoroutines

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 berbeza

Cari 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn