簡體   English   中英

使用Erlang產生多個外部進程

[英]Using Erlang to spawn multiple external processes

當我穿越Erlang的美好世界時,我注意到了它的美麗,但更重要的是,我注意到了它的速度。 令我驚訝的是,由於Erlang非常擅長生成輕量級進程,因此將其用作其他進程的包裝是否有意義。

例如,我使用rspec為ruby編寫測試。 假設我有10,000個測試,所有測試都可以獨立運行而沒有問題。 使用Erlang產生10,000個rspec並同時運行每個測試,而不是依次運行每個rspec,是否有意義? 還是這只是一個完全荒謬的想法?

您正在將erlang進程與OS進程混淆。 erlang VM在OS進程中運行,解釋並運行erlang程序(編譯在Beam文件中)。 當erlang程序調用spawnspawn_link ,VM將創建一個內部進程,該進程將由內部VM調度程序運行。 操作系統對這些進程一無所知。

但是,當erlang程序產生一個端口時(運行外部程序(如您的情況下的ruby解釋器)的通常方式),它將在VM外部創建一個新的OS進程。 該外部進程使用標准輸入輸出與VM通信。 如果您看到系統中的進程,則會注意到有一個波束處理(erlang VM)和一個紅寶石處理。

因此,從erlang VM啟動OS進程與通過任何其他方式(手動,在Shell腳本等中)啟動它們相比沒有任何區別。

我猜想rspec是重量級進程,在這種情況下,即使將它們“包裝”在Erlang進程中,它們中的10,000也將使任何操作系統崩潰。 從操作系統的角度來看,Erlang的進程不是真正的進程,它們無法通過其“神奇的”屬性使普通的OS進程充滿活力。 他們只是要求操作系統產生該過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM