ประสิทธิภาพ F # เทียบกับประสิทธิภาพของ Erlang มีข้อพิสูจน์ว่า VM ของ Erlang เร็วขึ้นหรือไม่


19

ฉันใช้เวลาในการเรียนรู้การเขียนโปรแกรมฟังก์ชั่นและฉันมาถึงส่วนที่ฉันต้องการเริ่มต้นเขียนโครงการแทนการเล่นน้ำในแบบฝึกหัด / ตัวอย่าง

ในขณะที่ทำการวิจัยของฉันฉันพบว่า Erlang ดูเหมือนว่าจะทรงพลังมากเมื่อพูดถึงการเขียนซอฟต์แวร์ที่เกิดขึ้นพร้อมกัน (ซึ่งเป็นเป้าหมายของฉัน) แต่ทรัพยากรและเครื่องมือสำหรับการพัฒนาไม่ได้พัฒนาเท่ากับผลิตภัณฑ์พัฒนาของ Microsoft

F # สามารถทำงานบน linux (Mono) เพื่อให้ตรงตามข้อกำหนด แต่ในขณะที่มองไปรอบ ๆ บนอินเทอร์เน็ตฉันไม่สามารถเปรียบเทียบ F # กับ Erlang ได้ ตอนนี้ฉันกำลังเอนตัวไปที่ Erlang เพียงเพราะดูเหมือนว่าจะมีข่าวมากที่สุด แต่ฉันอยากรู้ว่าจริงๆแล้วมันมีความแตกต่างด้านประสิทธิภาพระหว่างสองระบบหรือไม่

เนื่องจากฉันคุ้นเคยกับการพัฒนาใน. NET ฉันอาจจะสามารถเพิ่มความเร็วด้วย F # เร็วกว่า Erlang มาก แต่ฉันไม่สามารถหาทรัพยากรใด ๆ ที่จะทำให้ฉันเชื่อว่า F # นั้นสามารถปรับขนาดได้เหมือนกับ Erlang

ฉันสนใจการจำลองมากที่สุดซึ่งกำลังจะส่งข้อความที่ประมวลผลอย่างรวดเร็วไปยังโหนดแบบต่อเนื่อง

หากฉันยังทำงานได้ไม่ดีกับสิ่งที่ฉันพยายามถามโปรดขอการยืนยันเพิ่มเติม


12
ภาษาไม่มีความเร็ว การใช้ภาษาเฉพาะที่เรียกใช้โปรแกรมเฉพาะในอินพุตเฉพาะ (ซึ่งอาจรวมถึงโลกภายนอกทั้งหมดขึ้นอยู่กับโปรแกรม) มีความเร็ว

1
F # ทำงานบนรันไทม์. NET และ Erlang ทำงานบน VM ของตัวเอง กระบวนการของ Erlang นั้นมีน้ำหนักเบาเมื่อเทียบกับภาษาที่อยู่ในโดเมน (เช่น Scala) สำหรับการจำลองการวางไข่ของโหนดและส่งข้อความจำนวนมากรันไทม์. NET / Mono นั้นดีเท่ากับ VM ของ Erlang หรือ VM ที่เหนือกว่าของ Erlang หรือไม่?
afuzzyllama

3
@delnan: ภาษามีลักษณะเฉพาะด้านประสิทธิภาพ
Jon Harrop

2
@JonHarrop เป็นไงบ้าง? ภาษาการเขียนโปรแกรมเป็นเพียงบางไวยากรณ์และความหมายที่เกี่ยวข้อง

1
@delnan: ซีแมนทิกส์วางข้อ จำกัด ในการเพิ่มประสิทธิภาพ ตัวอย่างเช่นภาษาที่พิมพ์แบบไดนามิกนั้นยากที่จะปรับให้เหมาะสมในการปฏิบัติ การขาดประเภทของค่าใน JVM ส่งผลให้มีการจัดสรรฮีปมากขึ้นกว่าใน. NET และทำให้เกิดความเครียดมากขึ้นใน GC เช่นตัวสร้างรหัสผู้รวบรวมขยะสามารถและใช้ประโยชน์จากข้อมูลอย่างไม่สามารถเปลี่ยนแปลงได้เพื่อปรับปรุงประสิทธิภาพ การออกแบบภาษาการเขียนโปรแกรมมีผลอย่างมากต่อสิ่งนี้
Jon Harrop

คำตอบ:


21

คุณหมายถึงอะไรโดย "ทำงานได้" "การมีสื่อมากที่สุด" ไม่ใช่วิธีที่ดีที่สุดในการเลือกภาษา

การอ้างชื่อเสียงของ Erlang คือความสามารถในการขนานขนาดใหญ่ นั่นเป็นสาเหตุที่ใช้กันทั่วไปในสวิตช์โทรศัพท์ของ Ericsson Erlang นั้นนุ่มนวลตามเวลาจริงดังนั้นคุณสามารถรับประกันประสิทธิภาพได้แน่นอน

F # ได้รับประโยชน์จากความสามารถในการปรับให้เหมาะสมของ. NET Jitter นอกจากนี้ภาษาเองยังได้รับการออกแบบให้เป็นภาษาที่มีประสิทธิภาพสูง (เป็นตัวแปรของ OCaml ซึ่งใช้กันอย่างแพร่หลายในอุตสาหกรรมการเงินเนื่องจากความเร็ว)

ท้ายที่สุดถ้าคุณวางแผนที่จะใช้งานเอเจนต์เล็ก ๆ หลายล้านตัวในเวลาเดียวกัน

หน้านี้อธิบายถึงกรณีการใช้งานที่เหมาะสมสำหรับ Erlang


โดย "ปฏิบัติได้" ฉันหมายถึงปรับขนาดได้ ฉันรู้ว่าการกดไม่ได้หมายความว่าภาษานั้นจะต้องดีขึ้น แต่ดูเหมือนว่า Erlang นั้นได้รับการพิสูจน์แล้ว (อย่างน้อยก็โดยอีริคสัน) ตัวแทนหมายถึงอะไร กระบวนการ?
afuzzyllama

1
ใช่. Erlang ได้รับการพิสูจน์แล้วว่าจัดการสายโทรศัพท์จำนวนมากด้วยสวิตช์อีริคสันในเวลาเดียวกัน คุณต้องทราบว่ากรณีการใช้ของคุณคล้ายกันหรือไม่ ฉันเห็นว่าเป็นกรณีการใช้งานที่ค่อนข้างพิเศษ หากคุณลักษณะนี้ไม่ปรากฏในแอปพลิเคชันของคุณฉันไม่เห็นประโยชน์ใด ๆ ในการใช้ Erlang และหน้า Erlang อธิบายถึงกรณีการใช้งานบางอย่างที่ Erlang ไม่เหมาะสม
Robert Harvey

2
ตัวแทนนักแสดงมันเป็นแนวคิดการออกแบบที่เกิดขึ้นมากมายในการอภิปรายภาษาที่ใช้งานได้ ฉันประหลาดใจที่คุณยังไม่ได้เจอเลย en.wikipedia.org/wiki/Agent-based_model
Patrick Hughes

กล่าวอีกนัยหนึ่งคุณต้องการความสามารถในการขยายขนาดใหญ่ (ไม่ว่าจะตอนนี้หรือในที่สุด) ของ Erlang ที่ให้มาหรือไม่? โปรแกรมส่วนใหญ่ทำไม่ได้
Robert Harvey

1
F # ยังมีโมเดลตัวแทน - ใช้ชื่อ'MailboxProcessor'ที่มีความลับเล็กน้อยซึ่งเป็นประเภทเดียวกันกับใน Erlang ฉันไม่สามารถแสดงความคิดเห็นกับลักษณะการทำงานที่สัมพันธ์กันของแต่ละคนได้
FinnNk

7

สามารถกล่าวถ้อยแถลงวัตถุประสงค์เพียงเล็กน้อยในเรื่องนี้เนื่องจากประสิทธิภาพของสองภาษานี้ขึ้นอยู่กับแอปพลิเคชันและรูปแบบการเขียนโปรแกรมเป็นอย่างมาก

คำแนะนำเดียวที่ฉันให้ได้คือ F # มีข้อดีด้านประสิทธิภาพของระบบแบบสแตติกและ CLR ทำงานได้ดีในการใช้ประโยชน์จากสิ่งนี้เพื่อปรับปรุงประสิทธิภาพ F # มีเอเจนต์แบบอะซิงโครนัสและการส่งข้อความ แต่ไม่ได้รับการปรับให้เหมาะสมที่สุดและโค้ดซิงโครนัสมักเร็วกว่า 10 เท่า

Erlang ถูกพิมพ์แบบไดนามิกซึ่งทำให้มันมีข้อเสียอย่างมีนัยสำคัญในแง่ของประสิทธิภาพ (คาดว่ามวยมากขึ้น) แต่มันถูกสร้างขึ้นจากพื้นดินขึ้นเพื่อรองรับข้อความที่รวดเร็วผ่านระหว่างตัวแทนไม่ตรงกันเพื่อให้อาจเร็วกว่า F # เทียบเท่า . อย่างไรก็ตามฉันไม่มีผลลัพธ์มาตรฐานเพื่อสำรองข้อมูลนี้เป็นเพียงความคาดหวังของฉัน

นอกเหนือจากนี้ทั้ง Erlang และ F # เป็นภาษาที่ค่อนข้างมีชุมชนขนาดเล็กและเนื่องจากตลาดเป้าหมายที่แตกต่างกันคนที่คุ้นเคยกับทั้งสองจึงหายาก บุคคลเดียวที่ฉันสามารถนึกได้ว่าใครมีคุณสมบัติใกล้เคียงกันคือJesper Louis Andersenแต่ฉันไม่แน่ใจว่าเขาได้ทำ F # มากแค่ไหน


4

คุณควรอ่านโพสต์นี้โดย Joe Armstrong: http://erlang.org/pipermail/erlang-questions/2012-F กุมภาพันธ์/064277.html

สั้น ๆ ก็คือ Erlang ไม่ได้ถูกออกแบบมาให้เร็ว! มีความรวดเร็วพอสมควรในหลายกรณี แต่นั่นเป็นเรื่องรองสำหรับปัญหาเช่นการยอมรับข้อบกพร่องและความมั่นคง

ความจริงก็คือทั้ง Erlang และ F # เป็นภาษาที่ดีและในขณะที่ฉันได้ดูอย่างรวดเร็วที่ F # ฉันได้เขียนหนังสือเกี่ยวกับ Erlang: การสร้างแอปพลิเคชันบนเว็บด้วย Erlangและฉันสามารถพูดได้ว่ามันเป็นภาษาที่สนุก

ฉันจะชี้ให้เห็นว่าดูเหมือนว่าจะมีความนิยมในหนังสือภาษาเชิงฟังก์ชั่นที่จะตีพิมพ์ในอีก 6-9 เดือนข้างหน้า ฉันรู้ว่าอย่างน้อย 4 เกี่ยวกับ Erlang (รวมถึงของฉัน) One on Haskell รวมถึง Titles บน OCaml, Clojure และ F #

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.