golang 監控goroutine異常退出

2022-07-18 19:51:16 字數 1167 閱讀 3047

在golang中,我們可以很輕易產生數以萬計的goroutine,不過這也帶來了麻煩:在執行中某乙個goroutine異常退出,怎麼辦?

在erlang中,有link原語,2個程序可以鏈結在一起,乙個在異常退出的時候,向另乙個程序呼喊崩潰的原因,然後由另乙個程序處理這些訊號,包括是否重啟這個程序。在這方面,erlang的確做得很好,估計以後這個特性會在golang中得到實現。

由此得到啟發,我寫了乙個簡單的程式,監控goroutine異常退出。

package main

import (

"log""

runtime""

math/rand""

time")

type message

struct

//goroutine state

}func main()

supervisor(mess)

}func worker(mess chan message) )}

i :=recover()

if i !=nil

else

mess

}()now :=time.now()

seed :=now.unixnano()

rand.seed(seed)

num :=rand.int63()

if num % 2 != 0

else

}func supervisor(mess chan message) }}

原本是想把goroutine異常退出時的狀態,也就是某些變數儲存到message中的state,然後在另乙個goroutine裡面處理這些資料,不過能力有限,暫時做不出來,以後會完善的。這裡只驗證goroutine在異常退出的時候,向另乙個goroutine傳送訊號。

在worker函式裡面,會判斷隨機數是不是偶數,不是的話會使用panic異常退出,然後使用defer向supervisor傳送訊號,supervisor接受到就輸出結果。

下面看一下效果:

我們用了100個goroutine,也就有100個退出訊號。由圖可以得到我們的程式執行良好。

轉貼請註明來自:格通

golang 通過fsnotify監控檔案

二 使用fsnotify監控檔案 type watch struct func w watch watchdir dir string err w.watch.add path if err nil fmt.println monitor path return nil 開啟乙個goroutine來...

Golang 通過fsnotify監控多級目錄檔案

golang 通過fsnotify監控檔案,檢測資料夾目錄層級資料夾變化,菜鳥一枚,歡迎賜教!1.呼叫fsnotify包監控檔案 監控目錄 func this notifyfile watchdir dir string err this.watch.add path if err nil fmt....

golang 使用gops進行程式監控

go install github.com google gops請放到系統環境變數裡面 如果執行install正常來說應該生成在 gopath bin 下面 看到官方給了乙個測試例子 這玩意,一開始也不知道幹嘛的。後面發現如果不起這個程式的話。找不到對應的 程式日誌 執行 gops 檢視當前執行的...