您好,登錄后才能下訂單哦!
今天小編給大家分享一下Pony是什么的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
Pony 是一個(gè)面向?qū)ο蟮幕?AcTor 模型的安全而且高性能的編程語(yǔ)言。Pony 提供 Sublime 和 Atom 編輯插件,同時(shí)很快將提供 VIM 和 Visual Studio 支持。可使用 LLDB 和 GDB 進(jìn)行調(diào)試。
Pony 兼容 C 程序,其編譯器可從 Pony 庫(kù)中生成 C 的頭文件,這樣 C/C++ 程序可方便調(diào)用 Pony 庫(kù)。
你可以把 Pony 想象成某種“Rust 遇上 Erlang”的東西。Pony 有著最引人注目的特性,它們是:
類型安全存儲(chǔ)安全異常安全無(wú)數(shù)據(jù)競(jìng)爭(zhēng)無(wú)死鎖此外,它可以被編譯為高效的本地代碼,它是在開放的情況下開發(fā)的,在兩句版 BSD 許可證下發(fā)布。
以上說(shuō)的功能不少,但在這里我將重點(diǎn)關(guān)注那些對(duì)我們公司來(lái)說(shuō)采用 Pony 至關(guān)重要的功能。
使用大多數(shù)我們現(xiàn)有的工具編寫快速、安全、高效、高并發(fā)的程序并非易事?!翱焖佟⒏咝?、高并發(fā)”是可實(shí)現(xiàn)的目標(biāo),但加入“安全”之后,就困難了許多。對(duì)于 Wallaroo,我們希望同時(shí)實(shí)現(xiàn)四個(gè)目標(biāo),而 Pony 讓實(shí)現(xiàn)它們更加簡(jiǎn)單。
Pony 讓并發(fā)變得簡(jiǎn)單。部分是通過(guò)提供一個(gè)固執(zhí)的并發(fā)方式實(shí)現(xiàn)的。在 Pony 語(yǔ)言中,所有的并發(fā)都是通過(guò) Actor 模型 進(jìn)行的。
Actor 模型以在 Erlang 和 Akka 中的實(shí)現(xiàn)最為著名。Actor 模型出現(xiàn)于上世紀(jì) 70 年代,細(xì)節(jié)因?qū)崿F(xiàn)方式而異。不變的是,所有計(jì)算都由通過(guò)異步消息進(jìn)行通信的 actor 來(lái)執(zhí)行。
你可以用這種方式來(lái)看待 Actor 模型:面向?qū)ο笾械膶?duì)象是狀態(tài) + 同步方法,而 actor 是狀態(tài) + 異步方法。
當(dāng)一個(gè) actor 收到一個(gè)消息時(shí),它執(zhí)行相應(yīng)的方法。該方法可以在只有該 actor 可訪問(wèn)的狀態(tài)下運(yùn)行。Actor 模型允許我們以并發(fā)安全的方式使用可變狀態(tài)。每個(gè) actor 都是單線程的。一個(gè) actor 中的兩個(gè)方法絕不會(huì)并發(fā)運(yùn)行。這意味著,在給定的 actor 中,數(shù)據(jù)更新不會(huì)引起數(shù)據(jù)競(jìng)爭(zhēng)或通常與線程和可變狀態(tài)相關(guān)的其他問(wèn)題。
Pony actor 通過(guò)一個(gè)高效的工作竊取調(diào)度程序來(lái)調(diào)度。每個(gè)可用的 CPU 都有一個(gè)單獨(dú) Pony 調(diào)度程序。這種每個(gè)核心一個(gè)線程的并發(fā)模型是 Pony 嘗試與 CPU 協(xié)同工作以盡可能高效運(yùn)行的一部分。Pony 運(yùn)行時(shí)嘗試盡可能利用 CPU 緩存。代碼越少干擾緩存,運(yùn)行得越好。Pony 意在幫你的代碼與 CPU 緩存友好相處。
Pony 的運(yùn)行時(shí)還會(huì)有每個(gè) actor 的堆,因此在垃圾收集期間,沒(méi)有 “停止一切” 的垃圾收集步驟。這意味著你的程序總是至少能做一點(diǎn)工作。因此 Pony 程序最終具有非常一致的性能和可預(yù)測(cè)的延遲。
Pony 類型系統(tǒng)引入了一個(gè)新概念:引用能力,它使得數(shù)據(jù)安全成為類型系統(tǒng)的一部分。Pony 語(yǔ)言中每種變量的類型都包含了有關(guān)如何在 actor 之間分享數(shù)據(jù)的信息。Pony 編譯器用這些信息來(lái)確認(rèn),在編譯時(shí),你的代碼是無(wú)數(shù)據(jù)競(jìng)爭(zhēng)和無(wú)死鎖的。
如果這聽起來(lái)有點(diǎn)像 Rust,那是因?yàn)楸緛?lái)就是這樣的。Pony 的引用功能和 Rust 的借用檢查器都提供數(shù)據(jù)安全性;它們只是以不同的方式來(lái)接近這個(gè)目標(biāo),并有不同的權(quán)衡。
決定是否要在一個(gè)非業(yè)余愛(ài)好的項(xiàng)目上使用一門新的編程語(yǔ)言是困難的。與其他方法想比,你必須權(quán)衡工具的適當(dāng)性和不成熟度。那么,Pony 和你搭不搭呢?
如果你有一個(gè)困難的并發(fā)問(wèn)題需要解決,那么 Pony 可能是一個(gè)好選擇。解決并發(fā)應(yīng)用問(wèn)題是 Pony 之所以存在的理由。如果你能用一個(gè)單線程的 Python 腳本就完成所需操作,那你大概不需要它。如果你有一個(gè)困難的并發(fā)問(wèn)題,你應(yīng)該考慮 Pony 及其強(qiáng)大的無(wú)數(shù)據(jù)競(jìng)爭(zhēng)、并發(fā)感知類型系統(tǒng)。
你將獲得一個(gè)這樣的編譯器,它將阻止你引入許多與并發(fā)相關(guān)的錯(cuò)誤,并在運(yùn)行時(shí)為你提供出色的性能特征。
以上就是“Pony是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。