如果有仔細看過swoole task 的文檔的話,應該都會注意到這句話
task操作的次數必須小於onTask處理速度,如果投遞容量超過處理能力,task會塞滿快取區,導致worker進程發生阻塞。
worker流程將無法接收新的請求 中(建議學習: swoole) 若阻塞為程式碼
##wask##wask##wor 程式碼#w服務無法工作,引發問題。我曾經使用task 發送服務的連結日誌,接收日誌的服務出現bug,造成發送日誌的task 阻塞,然後服務gg 的情況,之後我就對task 做了一波最佳化。
想法就是使用 swoole channel 和 swoole user process 實作一套 task 。
使用channel 接收數據,然後在user process 消費數據,假如channel 滿了僅僅會造成push 數據失敗,並不會引發阻塞,因為是鏈路日誌,是允許丟失的,所以這個方案完全沒問題。
在swoole user process 消費channel 的策略的偽代碼如下$sleepTime = 5;
$maxSleepTime = 100;
while (true) {
$task = $chan->pop();
if ($task === false) {
$sleepTime = $sleepTime + 5;
if ($sleepTime > $maxSleepTime) {
$sleepTime = $maxSleepTime;
}
usleep($sleepTime * 1000);
continue;
}
$sleepTime = 0;
// 处理数据
}
如果消費到channel的數據,就使用死循環處理數據,因為處理數據過程中是有其他操作的,所以並不會佔用大量cpu。
如果消費不到數據,就sleep 5ms,sleep的時間依次累加,直到達到最大值100ms,達到cpu 使用率和處理數據實時性的一個平衡,具體平衡點可以根據自己的業務按需調整。
以上是swoole task會阻塞麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文概述了為Swoole項目做出貢獻的方法,包括報告錯誤,提交功能,編碼和改進文檔。它討論了初學者開始貢獻的必要技能和步驟,以及如何找到緊迫的是

本文討論了在PHP中使用Swoole的異步I/O功能用於高性能應用程序。它涵蓋安裝,服務器設置和優化策略。單詞計數:159

Swoole的反應堆模型使用事件驅動的,非阻滯I/O架構來有效地管理高持續性場景,通過各種技術優化性能。(159個字符)(159個字符)

摘要:本文討論了通過識別,隔離和固定解決SWOORE應用程序中的內存洩漏,並強調了常見原因,例如不當資源管理和不受管理的Coroutines。 Swoole Tracker和Valgrind等工具


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載
最受歡迎的的開源編輯器