99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Elixir 鏈接

2023-12-15 13:58 更新
Elixir中最常用的生成方式就是spawn_link/1.在我們展示spawn_link/1的例子之前,先看看當(dāng)進(jìn)程失敗時(shí)會(huì)發(fā)生什么:
iex> spawn fn -> raise "oops" end
#PID<0.58.0>

[error] Process #PID<0.58.00> raised an exception
** (RuntimeError) oops
    :erlang.apply/2

僅僅是記錄了錯(cuò)誤,進(jìn)程依然能夠被生成.這是因?yàn)檫M(jìn)程之間是獨(dú)立的.如果我們希望一個(gè)進(jìn)程的失敗影響到其它進(jìn)程,我們就需要鏈接它們.使用spawn_link/1:

iex> spawn_link fn -> raise "oops" end
#PID<0.41.0>

** (EXIT from #PID<0.41.0>) an exception was raised:
    ** (RuntimeError) oops
        :erlang.apply/2

當(dāng)殼中發(fā)生了一個(gè)錯(cuò)誤,殼會(huì)自動(dòng)捕獲這個(gè)錯(cuò)誤并以良好的格式展示出來(lái).為了理解我們的代碼中究竟發(fā)生了什么,讓我們?cè)谖募衼?lái)使用?spawn_link/1?并運(yùn)行它:

# spawn.exs
spawn_link fn -> raise "oops" end

receive do
  :hello -> "let's wait until the process fails"
end
$ elixir spawn.exs

** (EXIT from #PID<0.47.0>) an exception was raised:
    ** (RuntimeError) oops
        spawn.exs:1: anonymous fn/0 in :elixir_compiler_0.__FILE__/1

這一次進(jìn)程失敗了并且關(guān)閉了它所鏈接的父進(jìn)程.我們也可以通過(guò)調(diào)用Process.link/1來(lái)手工鏈接進(jìn)程.我們建議你查看一下Process模塊,其中有進(jìn)程的其他功能.

進(jìn)程和鏈接在創(chuàng)建可容錯(cuò)系統(tǒng)中扮演著重要角色.在Elixir應(yīng)用中,我們經(jīng)常將進(jìn)程和管理者鏈接起來(lái),管理者的作用是監(jiān)督這塊區(qū)域中進(jìn)程的生死.進(jìn)程間是獨(dú)立的且默認(rèn)不分享任何東西,所以它們不會(huì)毀壞或影響其它進(jìn)程.

不同于其它語(yǔ)言要求我們捕捉/處理異常,在Elixir中我們可以任由進(jìn)程失敗,因?yàn)槲覀兤谕芾碚吣芎线m地重啟我們的系統(tǒng)."快速失敗"是編寫(xiě)Elixir軟件時(shí)的一條守則.

spawn/1spawn_link/1是Elixir里用于創(chuàng)建進(jìn)程的最原始的方法.盡管我們目前只用過(guò)它們,但大多數(shù)時(shí)候我們將抽象地在它們的上層操作.讓我們來(lái)看看最常用的方式--任務(wù).


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)