成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

誰說PHP不能異步和并行運行?

開發 前端
如果每個接口調用需要1秒,那么即使是10條數據,也需要10秒來完成,這還沒有考慮到網絡延遲和接口提供方可能出現的問題。

場景

在處理需要遠程接口調用的大量數據時,我們面臨一個關鍵問題:串行處理導致的效率低下。如果每個接口調用需要1秒,那么即使是10條數據,也需要10秒來完成,這還沒有考慮到網絡延遲和接口提供方可能出現的問題。在串行執行的情況下,一旦接口調用遇到問題,整個處理時間會成倍增加,這不僅降低了程序的響應速度,也增加了系統的不穩定性。

為了解決這個問題,我們可以采取以下幾種優化策略:

  • 異步執行:通過異步調用遠程接口,可以讓程序在等待接口響應的同時繼續執行其他任務,從而提高整體的處理速度。
  • 并行處理:利用多線程或多進程技術,同時發起多個遠程接口調用,顯著減少總的處理時間。

現有方案

遠程接口案例

假設第三方或者遠程接口調用偽代碼如下:

<?php
public function sync(): \support\Response
{
    sleep(1);
    return json(['data' => date('Y-m-d H:i:s')]);
}

接口調用訪問地址:http://127.0.0.1:8888/index/sync

業務系統案例

假設業務系統調用偽代碼:

<?php
declare(strict_types=1);

foreach (range(1, 10) as $key) {
    $list[] = file_get_contents("http://127.0.0.1:8888/index/sync");
}
print_r($list);

調用輸出:

[x] [系統調用耗時時間] 10.138074159622
Array
(
    [0] => {"data":"2024-05-16 22:38:00"}
    [1] => {"data":"2024-05-16 22:38:01"}
    [2] => {"data":"2024-05-16 22:38:02"}
    [3] => {"data":"2024-05-16 22:38:03"}
    [4] => {"data":"2024-05-16 22:38:04"}
    [5] => {"data":"2024-05-16 22:38:05"}
    [6] => {"data":"2024-05-16 22:38:06"}
    [7] => {"data":"2024-05-16 22:38:07"}
    [8] => {"data":"2024-05-16 22:38:08"}
    [9] => {"data":"2024-05-16 22:38:09"}
)

可以看出上面是按順序調用接口,總共耗時10.14秒。

異步并行調用

這個庫提供了一個小而簡單的PHP PCNTL擴展的包裝器。它允許并行運行不同的進程,并具有易于使用的API。官方地址:https://github.com/spatie/async

安裝

您可以通過composer安裝該軟件包:

composer require spatie/async

注意:該擴展庫異步并行執行需要所需的擴展pcntl 和 posix。沒有安裝在您當前的PHP運行時中, Pool 將自動回退到同步執行任務。

Pool類有一個靜態方法 isSupported,你可以調用它來檢查你的平臺是否能夠運行異步進程。

require '../vendor/autoload.php';

use Spatie\Async\Pool;
var_dump(Pool::isSupported());

支持異步進程則打印true,否則為false。

使用

<?php
/**
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/5/21 14:00
 */
declare(strict_types=1);

require '../vendor/autoload.php';

use Spatie\Async\Pool;

$timeOne = microtime(true);
$pool = Pool::create();

foreach (range(1, 10) as $item) {
    $pool[] = async(function () use ($item) {
        return file_get_contents("http://127.0.0.1:8888/index/sync");
    })->then(function (string $output) use (&$list) {
        // Handle success
        $list[] = $output;
    })->catch(function (Throwable $exception) {
        // Handle exception
        echo '[x] [異常] ' . $exception->getMessage() . PHP_EOL;
    });
}
await($pool);

$timeTwo = microtime(true);
echo '[x] [系統調用耗時時間] ' . ($timeTwo - $timeOne) . PHP_EOL,
print_r($list);

調用輸出:

[x] [系統調用耗時時間] 4.3443310260773
Array
(
    [0] => {"data":"2024-05-16 22:53:47"}
    [1] => {"data":"2024-05-16 22:53:47"}
    [2] => {"data":"2024-05-16 22:53:47"}
    [3] => {"data":"2024-05-16 22:53:47"}
    [4] => {"data":"2024-05-16 22:53:47"}
    [5] => {"data":"2024-05-16 22:53:47"}
    [6] => {"data":"2024-05-16 22:53:47"}
    [7] => {"data":"2024-05-16 22:53:47"}
    [8] => {"data":"2024-05-16 22:53:48"}
    [9] => {"data":"2024-05-16 22:53:49"}
)

可以看出上面是按并行調用接口,總共耗時4.34秒。節省了差不多一半多時間。

責任編輯:武曉燕 來源: 開源技術小棧
相關推薦

2022-04-26 08:41:38

Swift并發系統iOS

2013-08-02 10:32:56

DevOps

2013-09-12 13:27:07

DevOps

2012-02-24 22:54:56

開源linux

2009-10-27 09:12:50

Visual Stud

2019-07-26 09:20:21

ClusterShel命令Linux

2022-10-24 09:02:28

Selenium自動化

2011-05-04 14:19:46

iPad打印打印機

2009-07-02 10:08:23

安裝Azure

2010-03-04 09:10:34

Linux Chrom

2010-03-08 09:17:13

F#異步

2009-03-13 10:54:18

SQL Server并行查詢數據庫管理

2021-10-03 20:08:29

HTTP2Scrapy

2017-06-09 13:36:33

人工智能深度學習

2018-10-18 09:34:16

高并發異步化并行化

2009-12-08 18:33:22

PHP函數printa

2017-08-31 13:50:53

Python編程語言

2009-03-24 11:11:19

加速并行查詢SQL

2022-11-03 16:00:10

2010-03-26 19:03:19

F#異步并行模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲午夜视频在线观看 | 久久久久久久国产 | 亚洲日本中文字幕在线 | 亚洲欧美一区二区三区情侣bbw | 久草中文网 | 一区二区三区精品视频 | 久久99深爱久久99精品 | 欧美激情欧美激情在线五月 | 欧美精品影院 | 久草网址 | 日韩久久久久久 | 成人国产精品久久 | 午夜在线小视频 | 一级一级毛片免费看 | 视频二区国产 | 欧美一级淫片免费视频黄 | 亚洲性综合网 | 久久国产精品-国产精品 | 日韩欧美国产一区二区三区 | 中文在线观看视频 | 亚洲国产aⅴ精品一区二区 免费观看av | 免费观看的av毛片的网站 | 国产一区二区三区免费 | 一区不卡在线观看 | 中文字幕不卡视频在线观看 | 日韩精品一区二区三区中文在线 | 国产1区2区 | 青青草中文字幕 | 久久久123| 99久久婷婷| 亚洲成人观看 | 亚洲不卡在线观看 | 亚洲国产精品一区 | 欧美一级欧美一级在线播放 | 久久亚洲欧美日韩精品专区 | 天天插天天操 | 久久精品成人一区 | 在线视频91 | 久久一本 | 逼逼网 | 午夜在线精品偷拍 |