一看就懂系列之 非同步執行

2021-07-10 22:33:43 字數 2192 閱讀 1973

那麼哪些地方需要用到非同步執行呢?

1.如果一次請求需要大量的資料庫操作,那麼可以考慮

2.如果執行類似匯出檔案這樣資料量很大需要執行很久的邏輯的,可以考慮

3.高併發的時候,想處理得快一點,可以考慮

4.你想裝逼的時候,可以考慮

使用姿勢

那麼對於指令碼佇列執行來說,主要這幾個步驟:

1.建立某個耗時任務的key

2.將任務以key為標準放入佇列中。佇列的選擇可以選redis。

3.通過rpush lpop來將任務放入佇列,和從佇列取出執行任務。

4.並且記錄關鍵資訊的日誌,以便後面檢視。

打分

裝逼指數:* * *

實用指數:* * * * *

使用姿勢

swoole是c語言寫的php擴充套件,效能方面:槓槓的。

官網:wiki.swoole.com

使用的話這幾個步驟:

1.必須先安裝swoole擴充套件

2.send任務到swoole佇列

3.swoole receive到任務,進行執行相應的邏輯

4.具體的**就不貼了。

ps:1.身為國產神器,有必要支援一下swoole

2.使用使用有一點風險就是萬一在執行的時候worker掛了,那麼任務將直接丟失,所以和錢有關的慎用。

打分

裝逼指數:* * * *

實用指數:* * * * *

使用姿勢

gearman佇列算是歷史比較悠久的了,相應的使用場景也很多,主要是還解決了乙個問題,就是worker掛了,重啟之後任務會繼續執行不會丟失。

1.按照gearman擴充套件(有點難裝是真的),建議在裝乙個supervisor用於監控gearman佇列

2.附上教程

yum -y install libgearman

yum install libgearman-devel

wget

tar -zxvf gearman-1.1.2.tgz

cd gearman-1.1.2

make&& make install

增加extension=gearman.so

測試vim worker.php

<?php

$worker= new gearmanworker();

$worker->addserver();

$worker->addfunction("reverse", "my_reverse_function");

while ($worker->work());

function my_reverse_function($job)

?>

vim client.php

<?php

$client= new gearmanclient();

$client->addserver();

print $client->do("reverse", "hello world!");

?>

php client.php

!dlrow olleh

3.supervisor需要配置一下以作為監控

這裡以乙個push推送作為例子:

vim /etc/supervisord.conf

[program:apns_push]

command=/usr/bin/php /data2/www/web/apns/worker_origin.php

process_name=apns_push_%(process_num)s

numprocs=2

autostart=true

autorestart=true

user=nginx

stdout_logfile=/data2/log/push/push_%(process_num)s.log

stderr_logfile=/data2/log/push/push.error.log

打分

裝逼指數:* * * * *

實用指數:* * * * *

演算法一看就懂之 堆疊

一 堆疊 是什麼?堆疊 stack 是一種先進後出的 操作受限的線性表,也可以直接稱為棧。可以把棧想象成乙個桶一樣,往這個桶裡面一層一層的放東西,先放進去的在裡面,後放進去的東西依次在外面。但取東西的時候就是先取靠近外面的,再依次一層層取裡面的。這就是 後進先出 last in first out ...

一看就懂的SwitchHosts

switchhosts 是乙個管理 切換多個 hosts 方案的工具。它是乙個免費開源軟體。日常開發工作中,我們可能經常需要切換各種 hosts 繫結,比如在本地開發時可能需要乙個開發環境的 hosts 繫結方案,發布到測試環境後又有乙個測試環境的 hosts 繫結方案,然後可能還有乙個預發布環境,...

一看就懂TCP 連線

我們先來看乙個定義。這樣理解比較抽象。我們換個角度。它的本質還是傳輸控制。如果讓我們自己設計這個傳輸,我們會怎麼想呢。tcp 協議它會先建立連線。三次握手目的是保證雙方都有傳送和接收的能力 首要原因是為了防止舊的重複連線初始化造成混亂。同步雙方初始序列號客戶端和服務端都處於 closed 狀態。先是...