กลับไปหน้าบทความ

อ่าน 5 นาที

ด้ายสีเขียว

ใน การเขียนโปรแกรมคอมพิวเตอร์ เธรด สีเขียว คือ เธรด ที่กำหนดเวลาโดย ไลบรารีรันไทม์ หรือ เครื่องเสมือน (VM) แทนที่จะกำหนดโดย ระบบปฏิบัติการ พื้นฐาน (OS)...

ด้ายสีเขียว

ในการเขียนโปรแกรมคอมพิวเตอร์เธรดสีเขียวคือเธรดที่กำหนดเวลาโดยไลบรารีรันไทม์หรือเครื่องเสมือน (VM) แทนที่จะกำหนดโดยระบบปฏิบัติการ พื้นฐาน (OS) เธรดสีเขียวจำลองสภาพแวดล้อมแบบมัลติเธรดโดยไม่ต้องพึ่งพาความสามารถของระบบปฏิบัติการดั้งเดิม และได้รับการจัดการในพื้นที่ผู้ใช้แทนที่จะเป็น พื้นที่ เคอร์เนลทำให้สามารถทำงานในสภาพแวดล้อมที่ไม่มีการสนับสนุนเธรดดั้งเดิมได้[ 1 ]

นิรุกติศาสตร์

Green threads หมายถึงชื่อของไลบรารีเธรดดั้งเดิมสำหรับภาษา การเขียนโปรแกรม Java (ซึ่งเปิดตัวในเวอร์ชัน1.1และต่อมา Green threads ก็ถูกยกเลิกในเวอร์ชัน1.3เพื่อใช้ native threads แทน) ได้รับการออกแบบโดยThe Green Teamที่Sun Microsystems [ 2 ]

ประวัติศาสตร์

ฟังก์ชัน Green threads เคยเปิดให้ใช้งานในภาษา Java ในช่วงสั้นๆ ระหว่างปี 1997 ถึง 2000

เธรดสีเขียวใช้เธรดของระบบปฏิบัติการร่วมกันผ่านการทำงานพร้อมกันแบบร่วมมือ ดังนั้นจึงไม่สามารถเพิ่มประสิทธิภาพการทำงานแบบขนานได้เหมือนกับเธรดของระบบปฏิบัติการ ข้อดีหลักของโครูทีนและเธรดสีเขียวคือความง่ายในการใช้งาน

ผลงาน

บนโปรเซสเซอร์แบบมัลติคอร์ การใช้งานเธรดแบบเนทีฟสามารถกำหนดงานให้กับโปรเซสเซอร์หลายตัวได้โดยอัตโนมัติ ในขณะที่การใช้งานเธรดสีเขียวโดยปกติไม่สามารถทำได้[ 1 ] [ 3 ]เธรดสีเขียวสามารถเริ่มต้นได้เร็วกว่ามากบน VM บางตัว อย่างไรก็ตาม บนคอมพิวเตอร์แบบโปรเซสเซอร์เดี่ยว รูปแบบที่มีประสิทธิภาพที่สุดยังไม่ได้รับการกำหนดอย่างชัดเจน

การทดสอบประสิทธิภาพบนคอมพิวเตอร์ที่ใช้เคอร์เนล Linuxเวอร์ชัน 2.2 (เผยแพร่ในปี 1999) แสดงให้เห็นว่า: [ 4 ]

  • เธรดสีเขียวมีประสิทธิภาพเหนือกว่าเธรดพื้นฐานของ Linux อย่างมากในด้านการเปิดใช้งานและการซิงโครไนซ์ เธรด
  • เธรดพื้นฐานของ Linux มีประสิทธิภาพดีกว่าเล็กน้อยในด้านการรับส่งข้อมูล (I/O) และการสลับบริบท

เมื่อเธรดสีเขียวดำเนินการเรียกใช้ระบบแบบบล็อก ไม่เพียงแต่เธรดนั้นจะถูกบล็อกเท่านั้น แต่เธรดทั้งหมดภายในกระบวนการก็จะถูกบล็อกด้วย[ 5 ]เพื่อหลีกเลี่ยงปัญหานี้ เธรดสีเขียวต้องใช้I/O แบบไม่บล็อกหรือ การดำเนินการ I/O แบบอะซิงโครนัสแม้ว่าความซับซ้อนที่เพิ่มขึ้นในฝั่งผู้ใช้สามารถลดลงได้หากเครื่องเสมือนที่ใช้เธรดสีเขียวสร้างกระบวนการ I/O เฉพาะ (ซ่อนจากผู้ใช้) สำหรับการดำเนินการ I/O แต่ละครั้ง

นอกจากนี้ยังมีกลไกที่ช่วยให้สามารถใช้เธรดแบบเนทีฟและลดภาระในการเปิดใช้งานและการซิงโครไนซ์เธรดได้อีกด้วย:

  • พูลเธรดช่วยลดต้นทุนในการสร้างเธรดใหม่โดยการใช้เธรดจำนวนจำกัดซ้ำ[ 6 ]
  • ภาษาที่ใช้เครื่องเสมือนและเธรดดั้งเดิมสามารถใช้การวิเคราะห์การหลีกเลี่ยงเพื่อหลีกเลี่ยงการซิงโครไนซ์บล็อกโค้ดเมื่อไม่จำเป็น[ 7 ]

เธรดสีเขียวใน Java Virtual Machine

ในJava 1.1เธรดสีเขียวเป็นโมเดลการทำงานแบบมัลติเธรดเพียงแบบเดียวที่ใช้โดยเครื่องเสมือน Java (JVM) [ 8 ]อย่างน้อยก็บนSolarisเนื่องจากเธรดสีเขียวมีข้อจำกัดบางประการเมื่อเทียบกับเธรดแบบเนทีฟ เวอร์ชัน Java ต่อมาจึงยกเลิกเธรดสีเขียวและหันมาใช้เธรดแบบเนทีฟแทน[ 9 ] [ 10 ]

ข้อยกเว้นสำหรับเรื่องนี้คือเครื่องเสมือน Squawkซึ่งเป็นการผสมผสานระหว่างระบบปฏิบัติการสำหรับอุปกรณ์พลังงานต่ำและเครื่องเสมือน Java โดยใช้เธรดสีเขียวเพื่อลดการใช้โค้ดเนทีฟ ให้น้อยที่สุด และเพื่อรองรับการย้ายส่วนต่างๆ ของระบบ

Kilim [ 11 ] [ 12 ]และ Quasar [ 13 ] [ 14 ] เป็นโครงการโอเพนซอร์สที่ใช้เธรดสีเขียวใน JVM เวอร์ชันหลังๆ โดยการแก้ไขไบต์โค้ด Javaที่สร้างโดยคอมไพเลอร์ Java (Quasar ยังรองรับKotlinและClojure ด้วย )

เส้นใยสีเขียวในภาษาอื่นๆ

มีภาษาโปรแกรม อื่นๆ อีกหลายภาษา ที่ใช้กลไกการทำงานที่เทียบเท่ากับ green threads แทนที่จะใช้ threads แบบดั้งเดิม ตัวอย่างเช่น:

  • ในภาษา C สำหรับระบบ POSIXมีmakecontextฟังก์ชันสำหรับเธรดแบบร่วมมือกันที่มีน้ำหนักเบา แต่ไม่ได้รวมอยู่ในข้อกำหนด POSIX.1-2008 เนื่องจากมีความแตกต่างกันระหว่างระบบต่างๆ
  • Chicken Schemeใช้เธรดระดับผู้ใช้ที่มีน้ำหนักเบาโดยอิงจากคอนทินิวเอชันระดับเฟิร์สคลาส[ 15 ]
  • ลิสป์สามัญ[ 16 ]
  • CPythonรองรับasyncio โดยธรรมชาติ มาตั้งแต่เวอร์ชัน 3.4 มีการใช้งานทางเลือกอื่นๆ เช่นgreenlet , eventletและgevent , PyPy [ 17 ]
  • คริสตัลนำเสนอเส้นใย[ 18 ]
  • Dนำเสนอไฟเบอร์ที่ใช้สำหรับ I/O แบบอะซิงโครนัส[ 19 ]
  • Dyalog APLเรียกสิ่งเหล่านี้ว่าเธรด[ 20 ]
  • เออร์ลัง[ 21 ]
  • Goใช้สิ่งที่เรียกว่าgoroutines [ 22 ]
  • ฮัสเคลล์[ 22 ]
  • Juliaใช้เธรดสีเขียวสำหรับงานต่างๆ ของ มัน
  • ลิมโบ[ 23 ]
  • Luaใช้coroutineสำหรับการทำงานแบบขนาน Lua 5.2 ยังมีคุณสมบัติ coroutine semantics แบบ C อย่างแท้จริงผ่านฟังก์ชันlua_yieldk, lua_callk, และ ส่วนขยาย lua_pcallkCoCo ช่วยให้สามารถใช้ coroutine semantics แบบ C อย่างแท้จริงใน Lua 5.1 ได้
  • Nimรองรับการรับส่งข้อมูลแบบอะซิงโครนัสและโครูทีน
  • OCamlตั้งแต่เวอร์ชัน 5.0 เป็นต้นมา รองรับ green threads ผ่านโมดูลDomainslib.Task
  • occamซึ่งนิยมใช้คำว่า " กระบวนการ " แทน คำว่า "เธรด"เนื่องจากมีต้นกำเนิดมาจากการสื่อสารกระบวนการแบบลำดับ
  • ภาษา Perlรองรับเธรดสีเขียวผ่านทางโครูทีน
  • PHPรองรับเธรดสีเขียวผ่านทางไฟเบอร์และโครูทีน
  • แร็กเก็ต (เธรดดั้งเดิมยังมีให้บริการผ่านทาง Places [ 24 ] )
  • รูบี้ก่อนเวอร์ชัน 1.9 [ 25 ]
  • การใช้งาน Concurrent MLของSML/NJ
  • Smalltalk (ส่วนใหญ่มีหลายเวอร์ชัน เช่นSqueak , VisualWorks, GNU Smalltalkเป็นต้น)
  • Stackless Pythonรองรับการทำงานแบบมัลติทาสกิ้งแบบแย่งชิงหรือการทำงานแบบมัลติทาสกิ้งแบบร่วมมือกันผ่านไมโครเธรด (เรียกว่าtasklets ) [ 26 ]
  • Tclมีcoroutinesและ event loop [ 27 ]

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

ในกรณีของ GHC Haskell การสลับบริบทจะเกิดขึ้นเมื่อมีการจัดสรรครั้งแรกหลังจากหมดเวลาที่สามารถกำหนดค่าได้ เธรด GHC ยังอาจทำงานบนเธรดระบบปฏิบัติการหนึ่งเธรดหรือมากกว่านั้นในช่วงอายุการใช้งาน (มีความสัมพันธ์แบบหลายต่อหลายระหว่างเธรด GHC และเธรดระบบปฏิบัติการ) ซึ่งช่วยให้เกิดการทำงานแบบขนานบน เครื่อง มัลติโปรเซสซิ่งแบบสมมาตรในขณะที่ไม่สร้างเธรดระบบปฏิบัติการที่มีค่าใช้จ่ายสูงเกินความจำเป็นในการทำงานบนจำนวนคอร์ที่มีอยู่

เครื่องเสมือน Smalltalk ส่วนใหญ่จะไม่นับขั้นตอนการประเมินผล อย่างไรก็ตาม เครื่องเสมือนยังคงสามารถแย่งการทำงานของเธรดที่กำลังทำงานอยู่ได้จากสัญญาณภายนอก (เช่น ตัวจับเวลาหมดเวลา หรือ I/O พร้อมใช้งาน) โดยปกติ จะใช้การจัดตารางเวลา แบบวนรอบ (round-robin scheduling ) เพื่อให้กระบวนการที่มีลำดับความสำคัญสูงซึ่งตื่นขึ้นมาเป็นประจำสามารถใช้การแย่งการทำงานแบบแบ่งเวลาได้ อย่างมีประสิทธิภาพ

[ [( หน่วง เวลา 50 มิลลิวินาที ) รอ ] ทำซ้ำ ] fork ที่: โปรเซสเซอร์ที่มีลำดับความสำคัญ I/O สูง

การใช้งานแบบอื่น เช่น QKS Smalltalk จะใช้ระบบแบ่งเวลาการทำงานเสมอ และแตกต่างจากระบบ green thread ส่วนใหญ่ QKS ยังรองรับการป้องกันการสลับลำดับความสำคัญอีก ด้วย

ความแตกต่างระหว่างเธรดเสมือนใน Java Virtual Machine กับเธรดเสมือนใน Java Virtual Machine

เธรดเสมือนได้รับการแนะนำเป็นฟีเจอร์ทดลองใน Java 19 [ 28 ]และเสถียรใน Java 21 [ 29 ]ความแตกต่างที่สำคัญระหว่างเธรดเสมือนและเธรดสีเขียวมีดังนี้:

  • เธรดเสมือนสามารถทำงานร่วมกับเธรดแพลตฟอร์มที่มีอยู่แล้ว (ที่ไม่ใช่เสมือน) และพูลเธรดได้
  • เธรดเสมือนช่วยปกป้องความเป็นนามธรรมของมัน:
    • ต่างจากเธรดสีเขียว การพักการทำงานบนเธรดเสมือนจะไม่บล็อกเธรดหลักที่อยู่เบื้องหลัง
    • การทำงานกับตัวแปรเฉพาะเธรดได้รับการลดความสำคัญลง และแนะนำให้ใช้ค่าขอบเขตแทนซึ่งมีน้ำหนักเบากว่า[ 30 ]
  • เธรดเสมือนสามารถระงับและเรียกกลับได้อย่างประหยัด โดยใช้ประโยชน์จากการสนับสนุนของ JVM สำหรับjdk.internal.vm.Continuationคลาส พิเศษนี้
  • เธรดเสมือนจะจัดการกับการเรียกที่ทำให้เกิดการบล็อกโดยการยกเลิกการเชื่อมต่อจากเธรดหลักอย่างโปร่งใสหากเป็นไปได้ มิเช่นนั้นจะชดเชยด้วยการเพิ่มจำนวนเธรดของแพลตฟอร์ม

ดูเพิ่มเติม

  • " สี่สิ่งที่น่าจดจำ " บทความ จาก JavaWorldเกี่ยวกับ Green threads
  • คำถามที่พบบ่อยเกี่ยวกับเธรดสีเขียวในเธรด Java
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Green_thread&oldid=1360100460 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ด้ายสีเขียว

ใน การเขียนโปรแกรมคอมพิวเตอร์ เธรด สีเขียว คือ เธรด ที่กำหนดเวลาโดย ไลบรารีรันไทม์ หรือ เครื่องเสมือน (VM) แทนที่จะกำหนดโดย ระบบปฏิบัติการ พื้นฐาน (OS)...

นิรุกติศาสตร์

Green threads หมายถึงชื่อของไลบรารีเธรดดั้งเดิม สำหรับ ภาษา การเขียนโปรแกรม Java (ซึ่งเปิดตัวในเวอร์ชัน 1.1 และต่อมา Green threads ก็ถูกยกเลิกในเวอร์ชัน 1.3 เพื่อใช้ native threads แทน) ได้รับการออกแบบโดย The Green Team ที่ Sun Microsystems [ 2 ]

ประวัติศาสตร์

ฟังก์ชัน Green threads เคยเปิดให้ใช้งานในภาษา Java ในช่วงสั้นๆ ระหว่างปี 1997 ถึง 2000

ผลงาน

บน โปรเซสเซอร์แบบมัลติคอ ร์ การใช้งานเธรดแบบเนทีฟสามารถกำหนดงานให้กับโปรเซสเซอร์หลายตัวได้โดยอัตโนมัติ ในขณะที่การใช้งานเธรดสีเขียวโดยปกติไม่สามารถทำได้ [ 1 ] [ 3 ] เธรดสีเขียวสามารถเริ่มต้นได้เร็วกว่ามากบน VM บางตัว อย่างไรก็ตาม...