那麼哪些地方需要用到非同步執行呢?
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 狀態。先是...