国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP menggunakan blPop/brPop redis, dan pelayan hanya boleh melaksanakannya sekali pada masa yang sama?
phpcn_u1582
phpcn_u1582 2017-05-16 12:59:45
0
2
825

Pelayan menggunakan seni bina nginx php-fpm dan redis menggunakan sambung untuk menyambung Setiap permintaan rangkaian harus mempunyai proses php-fpm yang berasingan. Saya menulis gelung dengan blPop/brPop dan sleep(5) dalam gelung. Penyemak imbas membuka dua tab dan menjalankannya, dan kemudian lpush memuatkan 4 data ke dalam list saya mendapati bahawa tab yang sentiasa berjalan dahulu boleh membaca dua data pertama. Dalam erti kata lain, blPop/brPop menyekat semua blPop/brPopyang lain pada keseluruhan pelayan yang mendengar kunci yang sama?
Berikut ialah kod yang saya uji:

//堵塞出隊(duì)列
public function test(){
    tool::load('hRedis.php');
    $timeOut = 20;//堵塞20秒

    $cn = 'test_blist';

    $ress = [];
    for($i=0;$i<2;$i++){
        $ress[] = hRedis::cacheListBPop($cn,$timeOut);//這里面封裝了redis的blPop/brPop
        sleep(5);
    }

    print_r($ress);
}

Mengapa proses yang berjalan kemudian masih disekat semasa tempoh tidur proses yang berjalan dahulu?

Kami melakukan ujian lanjut, mengalih keluar gelung, melaksanakan setiap proses sekali sahaja dan menggunakan redis->close() selepas setiap bacaan Kami mendapati bahawa masa tamat kedua-dua proses masih berbeza kira-kira 16 saat.

Untuk ujian terakhir, saya meletakkannya pada dua pelayan sekali lagi, kali ini bukan dua proses pada pelayan yang sama, tetapi dua pelayan saya mendapati bahawa masa tamat kedua-dua pelayan, bilangan saat berbeza bilangan saat yang saya masukkan ke dalam dua pelayan Masa antara kepingan data! Tiada kelewatan kali ini!

phpcn_u1582
phpcn_u1582

membalas semua(2)
某草草

Pertama sekali, Redis adalah satu utas, dan sebarang permintaan yang dihantar ke pelayan akan dibariskan dan dilaksanakan mengikut urutan Jadi anda berkata bahawa setiap permintaan rangkaian harus mempunyai proses yang berasingan, yang saya fikir adalah salah
arahan blPop , bukan bahagian pelayan, jika tidak, ia akan membawa maut untuk Redis berulir tunggal
Selepas anda membuka dua tab, ia bersamaan dengan membuka 2 tab dan tiada data push, 2 pelanggan ini adalah kedua-duanya dalam keadaan menyekat, dan masa menyekat anda ditetapkan kepada 20 saat
Apabila anda menolak data ke senarai, kedua-dua pelanggan melakukan operasi brpop pada kekunci yang sama, maka klien yang melaksanakan perintah brpop dahulu boleh mendapatkan nilai pop. , iaitu, halaman tab pertama tidur 5s, pop data lain, dan kemudian keluarkannya Selepas pelanggan pertama keluar, jika pelanggan kedua masih melaksanakan baris pop, saya fikir Ia harus mengeluarkan nilai berikutnya antara dua pelanggan adalah sangat singkat, ia mungkin akan keluar Anda boleh melaraskan selang masa pembukaan antara kedua-dua pelanggan dan kemudian beritahu saya jawapannya

Peter_Zhu

Ayat "Setiap permintaan rangkaian harus mempunyai proses yang berasingan" adalah salah dan telah ditukar kepada "Setiap permintaan rangkaian harus mempunyai proses php-fpm yang berasingan".
Soalan kedua adalah seperti yang anda katakan, pelanggan kedua akan mengeluarkan nilai yang berikutnya, tetapi masa apabila pelanggan kedua mengeluarkan nilai adalah 16 saat kemudian secara purata daripada pelanggan pertama saya ingin tahu mengapa ia sangat lambat, boleh dipendekkan? Mengapa klien kedua tidak boleh mendengar pada masa yang sama dengan klien pertama?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan