golang panic及處理機制

2022-09-21 02:51:08 字數 1215 閱讀 4385

目錄

panic會將這個異常不斷向上丟擲,直到有地方處理它,如果有處理,則不會再向上丟擲。倘若沒有處理,那麼最終會quenu導致main掛掉.

golang雖然沒有try catch機制,卻有一種類似的recover機制,後續demo我們可以觀測到它的用法和作用

func main()

}()go test1()

time.sleep(time.second * 3)

panic(errors.new("stop test1"))

log.println("123")

select {}

}func test1()

}()go test1()

time.sleep(time.second * 3)

makeerr()

log.println("123")

select {}}

func test1()

}()time.sleep(time.second * 3)

makeerr()

log.println("123")

select {}}

func test1()

}()go test1()

time.sleep(time.second * 3)

log.println("123")

select {}

}func test1()

協程中如果沒recover,那麼error就會拋向main,main就會掛掉,從而沒有執行到後面的log列印。

---> 這種情況,main中做defer recover是沒用的

func main()

func test1()

func test2()

}()log.println("test2 start")

panic(errors.new("stop test2"))

log.println("test2 end")

}func main()

func test1()

}()log.println("test1 start")

test2()

log.println("test1 end")

}func test2()

func2異常,執行終止,向呼叫者func1丟擲進而本身退出,func1得到異常,執行終止,本身退出時recover進行處理,從而保活了main

陣列處理機

sisd single instruction singledatastream 單指令流單資料流 單處理器計算機 對儲存在單一儲存器中的資料進行操作。simd single instruction multiple datastream 單指令流多資料流 同一條指令控制多個處理器的執行。misd ...

陣列處理機

陣列處理機 通過重複設定大量相同的處理單元pe processing element 將它們按一定方式互連成陣列,在單一控制部件cu control unit 控制下,對各自所分配的不同資料並行執行同一組指令規定的操作。是操作級並行的simd計算機 simd指的是單指令流多資料流,是一種實現資料級並...

處理機排程

如果沒有處理機排程,則意味著必須等待當前程序執行完畢後下一程序才能執行,而程序常需等待外設的輸入,i o的速度相比處理機是非常慢的,因此這會對處理機資源造成嚴重浪費。引入排程後,可在執行程序等待輸入時把處理機排程給其他程序,從而提高處理機的利用率。作業排程 高階 在外存的作業中挑選乙個或多個作業,給...