หัวข้อขึ้นมาในสองมุมมอง: ระบบปฏิบัติการและภาษาการเขียนโปรแกรม ในทั้งสองกรณีมีการเปลี่ยนแปลงในคุณลักษณะที่เธรดมีอยู่
คำจำกัดความที่น้อยที่สุดของเธรดคือมันเป็นสิ่งที่เกิดขึ้นตามลำดับสิ่งหนึ่งต่อจากกัน
ในโมเดลการดำเนินการของเครื่องทั่วไปแต่ละเธรดมีชุดรีจิสเตอร์วัตถุประสงค์ทั่วไปและตัวนับโปรแกรมของตนเอง หากเครื่องกำหนดการลงทะเบียนที่เฉพาะเจาะจงเป็นตัวชี้สแต็กจะมีหนึ่งสำเนาต่อเธรด
จากมุมมองของระบบปฏิบัติการขั้นต่ำที่ระบบปฏิบัติการต้องการเพื่อสนับสนุนเธรดคือวิธีการสลับระหว่างเธรด สิ่งนี้สามารถเกิดขึ้นได้โดยอัตโนมัติ ( มัลติทาสกิ้งแบบ preptiveหรือเฉพาะเมื่อเธรดทำการร้องขออย่างชัดเจน (แบบมัลติทาสก์แบบร่วมมือในบางครั้งเธรดนั้นเรียกว่าเส้นใย ) นอกจากนี้ยังมีโมเดลไฮบริดที่มีทั้งการจองล่วงหน้าและอัตราผลตอบแทนแบบร่วมมือ หรืองาน แต่ให้ผลตอบแทนที่ชัดเจนระหว่างกลุ่มของกลุ่ม / งานเดียวกันการสลับไปมาระหว่างเธรดเกี่ยวข้องกับการบันทึกค่ารีจิสเตอร์ของเธรดเก่าอย่างน้อยที่สุดและเรียกคืนค่ารีจิสเตอร์ของเธรดใหม่
ในระบบปฏิบัติการมัลติทาสกิ้งที่มีการแยกระหว่างงาน (หรือกระบวนการคุณสามารถปฏิบัติตามเงื่อนไขเหล่านี้เป็นคำพ้องความหมายในบริบทของระบบปฏิบัติการ) แต่ละงานมีทรัพยากรของตัวเองในพื้นที่ที่อยู่เฉพาะ แต่ยังเปิดไฟล์สิทธิ์ ฯลฯ แยกได้ ที่ให้ไว้โดยเคอร์เนลระบบปฏิบัติการเอนทิตีที่อยู่เหนือกระบวนการ โดยปกติแล้วงานแต่ละงานจะมีเธรดอย่างน้อยหนึ่งเธรด - งานที่ไม่ได้เรียกใช้โค้ดไม่ได้ใช้งานบ่อยนัก ระบบปฏิบัติการอาจรองรับหรือไม่รองรับหลายเธรดในงานเดียวกัน เช่น Unix ดั้งเดิมไม่ได้ งานยังคงสามารถรันหลายเธรดได้โดยจัดเรียงเพื่อสลับระหว่างเธรด - ซึ่งไม่ต้องการสิทธิ์พิเศษใด ๆ สิ่งนี้เรียกว่า“ เธรดผู้ใช้” โดยเฉพาะอย่างยิ่งในบริบท Unix ทุกวันนี้ระบบ Unix ส่วนใหญ่มีการจัดเตรียมเคอร์เนลเธรดโดยเฉพาะอย่างยิ่งเนื่องจากเป็นวิธีเดียวที่จะมีเธรดจำนวนมากของกระบวนการเดียวกันที่ทำงานบนโปรเซสเซอร์ที่แตกต่างกัน
ทรัพยากรระบบปฏิบัติการส่วนใหญ่นอกเหนือจากเวลาการคำนวณจะเชื่อมต่อกับงานไม่ใช่เธรด ระบบปฏิบัติการบางระบบ (ตัวอย่างเช่น Linux) คั่นขอบเขตสแต็กอย่างชัดเจนซึ่งในกรณีนี้แต่ละเธรดมีของตนเอง แต่มีระบบปฏิบัติการที่เคอร์เนลไม่ทราบอะไรเกี่ยวกับสแต็กพวกเขาเป็นเพียงส่วนหนึ่งของฮีปเท่าที่เกี่ยวข้อง เคอร์เนลยังจัดการบริบทเคอร์เนลสำหรับแต่ละเธรดซึ่งเป็นโครงสร้างข้อมูลที่มีข้อมูลเกี่ยวกับสิ่งที่เธรดกำลังทำอยู่ สิ่งนี้ทำให้เคอร์เนลจัดการหลายเธรดที่ถูกบล็อกในการเรียกระบบในเวลาเดียวกัน
เท่าที่ระบบปฏิบัติการมีความเกี่ยวข้องเธรดของงานจะเรียกใช้รหัสเดียวกัน แต่อยู่ในตำแหน่งที่แตกต่างกันในรหัสนั้น (ค่าตัวนับโปรแกรมที่แตกต่างกัน) อาจเกิดขึ้นหรือไม่เกิดขึ้นได้ว่าบางส่วนของรหัสของโปรแกรมนั้นจะถูกดำเนินการในเธรดเฉพาะเสมอ แต่โดยทั่วไปจะมีรหัสทั่วไป (เช่นฟังก์ชั่นยูทิลิตี้) ที่สามารถเรียกได้จากเธรดใด ๆ กระทู้ทั้งหมดเห็นข้อมูลเดียวกันมิฉะนั้นพวกเขาจะถือว่าเป็นงานที่แตกต่างกัน ถ้าข้อมูลบางอย่างสามารถเข้าถึงได้โดยเธรดเฉพาะนั่นคือโดยทั่วไปแล้วขอบเขตของภาษาการเขียนโปรแกรมไม่ใช่ของระบบปฏิบัติการ
ในภาษาโปรแกรมส่วนใหญ่พื้นที่เก็บข้อมูลจะถูกแชร์ระหว่างเธรดของโปรแกรมเดียวกัน นี่เป็นโมเดลหน่วยความจำแบบแบ่งใช้ของการเขียนโปรแกรมพร้อมกัน เป็นที่นิยมมาก แต่ก็มีข้อผิดพลาดได้ง่ายเช่นกันเนื่องจากโปรแกรมเมอร์จำเป็นต้องระมัดระวังเมื่อสามารถเข้าถึงข้อมูลเดียวกันหลายเธรดได้เนื่องจากเงื่อนไขการแข่งขันอาจเกิดขึ้นได้ โปรดทราบว่าแม้กระทั่งตัวแปรท้องถิ่นสามารถแชร์ระหว่างเธรด:“ ตัวแปรท้องถิ่น” (ปกติแล้ว) หมายถึงตัวแปรที่ชื่อมีความถูกต้องเฉพาะในระหว่างการดำเนินการฟังก์ชั่นหนึ่งครั้ง แต่เธรดอื่นสามารถรับตัวชี้ไปยังตัวแปรนั้นและเข้าถึงได้
นอกจากนี้ยังมีภาษาการเขียนโปรแกรมที่แต่ละเธรดมีที่เก็บข้อมูลของตนเองและการสื่อสารระหว่างกันเกิดขึ้นโดยการส่งข้อความผ่านช่องทางการสื่อสาร นี่คือรูปแบบการส่งข้อความของการเขียนโปรแกรมพร้อมกัน Erlangเป็นภาษาโปรแกรมหลักที่เน้นการส่งข้อความ สภาพแวดล้อมการประมวลผลมีการจัดการเธรดที่มีน้ำหนักเบามากและสนับสนุนโปรแกรมที่เขียนด้วยเธรดอายุสั้นจำนวนมากตรงกันข้ามกับภาษาการเขียนโปรแกรมอื่น ๆ ส่วนใหญ่ที่การสร้างเธรดเป็นการดำเนินการที่ค่อนข้างแพงและสภาพแวดล้อมรันไทม์ไม่สามารถรองรับขนาดใหญ่มาก จำนวนเธรดในเวลาเดียวกัน ส่วนย่อยของ Erlang (ส่วนหนึ่งของภาษาที่เกิดขึ้นภายในเธรดโดยเฉพาะการจัดการข้อมูล) คือ (ส่วนใหญ่) ทำงานได้อย่างหมดจด ดังนั้นเธรดสามารถส่งข้อความไปยังเธรดอื่นที่มีข้อมูลบางส่วนและไม่จำเป็นต้องกังวลเกี่ยวกับข้อมูลที่ถูกแก้ไขโดยเธรดอื่นในขณะที่กำลังใช้งานอยู่
บางภาษาผสมผสานทั้งสองรุ่นโดยนำเสนอที่เก็บข้อมูลเธรดโลคัลโดยมีหรือไม่มีระบบพิมพ์เพื่อแยกแยะที่เก็บของเธรดโลคัลจากที่เก็บโกลบอล หน่วยเก็บข้อมูลเธรดโลคัลเป็นคุณลักษณะความสะดวกสบายที่อนุญาตให้ชื่อตัวแปรกำหนดตำแหน่งหน่วยเก็บข้อมูลที่แตกต่างกันในเธรดที่แตกต่างกัน
การติดตามบางส่วน (ยาก) ที่อาจเป็นที่สนใจที่จะเข้าใจว่าเธรดคืออะไร:
- ขั้นต่ำที่เคอร์เนลต้องทำเพื่อสนับสนุนหลายเธรดคืออะไร?
- ในสภาพแวดล้อมแบบมัลติโปรเซสเซอร์สิ่งที่ต้องใช้ในการโยกย้ายเธรดจากตัวประมวลผลหนึ่งไปยังตัวประมวลผลอื่นได้อย่างไร
- สิ่งที่ต้องใช้ในการใช้ multithreading แบบร่วมมือ ( coroutines ) ในภาษาการเขียนโปรแกรมที่คุณชื่นชอบโดยไม่มีการสนับสนุนจากระบบปฏิบัติการและไม่ใช้การสนับสนุนในตัวถ้ามี (ระวังว่าภาษาการเขียนโปรแกรมส่วนใหญ่ไม่มีภาษาดั้งเดิมที่จำเป็นในการติดตั้ง coroutines ภายในเธรดเดี่ยว)
- ภาษาการเขียนโปรแกรมอาจมีลักษณะเป็นอย่างไรหากมีการทำงานพร้อมกัน แต่ไม่มีแนวคิด (ชัดเจน) ของเธรด (ตัวอย่างที่สำคัญ: pi-แคลคูลัส )