Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web...

36
108 บบบบบ 4 Multithreaded Programming 4.1 บบบบบ ใใใใใใใใใใใใใใใใใใใใใใใใ single thread ใใใ CPU ใใใใใใใใใใใใใใ process ใใใใใใใ 1 process ใใใใใใใใ ใใใใใใใใใใใใใใใใใใใใใใใใใ ใใใใใใใใใใใใใใ Multithreaded ใใใใใใใใใใใ ใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใ Java, Windows, Linux ใใใใ Unix ใใใใใใใใใใ ใใใใใใใใ thread ใใใ LWP (Light Weight Process) ใใใใใใใใใใใใใใใใใใใใใใใใใใใใ CPU ใใใใใใใใใใใ Thread ID, Program counter, Register set ใใใ Stack ใใใใใใใใใ ใ Thread ใใใใใใใใใใใใใใใใใใใใใใใ Heavy weight process ใใใใใใใใใใใใ Single thread of control 4.1.1 บบบบบบบบ (Motivation) ใใใใใใใใใใใ ใ ใใใใใใใใใใใใใใใ ใใใใใใใใใใใ PC ใใใใใใใใใใใใใใใใใ Multithreaded ใใใใใใใใใใใใใใใใใใใใใใใใใใใ ใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใ ใ ใใใใใใใ ใใใใใ Web Browser ใใใใใใใใใใใใใใใใใใใใใ ใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใ ใ ใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใ word processing ใใใใใใใใใใใใใใใใใใใใใใใใใใใ ใใใใใใใใใใใใใใใใใใใใ ใใใใใใใใใใใใใใใใใใใใ ใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใใ ใใใใใใใใใใใ

Transcript of Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web...

Page 1: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

108

บทท 4

Multithreaded Programming

4.1 บทนำ� ในอดตการประมวลผลเปนแบบ single thread ท CPU

ถกครอบครองโดย process ครงละ 1 process เทานน แตปจจบนระบบปฏบตการยอมใหเปนระบบ Multithreaded ซงในแตละระบบปฏบตการมรปแบบแตกตางกนไปเชน Java, Windows, Linux หรอ Unix ในบางครงเราเรยก thread วา LWP (Light Weight Process) ซงเปนความสามารถพนฐานของ CPU ในการจดสรร Thread ID, Program counter, Register set และ Stack ใหกบทก ๆ Thread สวนในอดตเราจะเรยกวา Heavy weight process เพราะเปนแบบ Single thread of control

4.1.1 แรงจงใจ (Motivation) ซอฟแวรหลาย ๆ ตวทรนอยบนคอมพวเตอร PC ททนสมย

คอระบบ Multithreaded การประยกตใชแบบฉบบของมนคอการควบคมจะแยกโปรเซสออกไปหลาย ๆ เสนงาน อยาง Web Browser กตองใชหนงเสนงานเพอแสดงรปภาพหรอตวอกษรในขณะทเสนอน ๆ ดงเอาขอมลจากเครอขายตวอยางเชน word processing เสนงานหนงจะแสดงในสวนของการแสดงผลของตวอกษร เสนงานทสองจะใชในเรองของการตอบสนองจากคยบอรด สวนเสนทสามจะชวยในเรองของการตรวจสอบคำาผด เปนตน

Page 2: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

109

ในสถานการณบางอยางการทำางานแบบ single อาจจะตองการทำางานพรอมกนหลาย ๆ งาน เชน web server ยอมรบสงทเครองลกขายตองการพวก web page image sound ถาเครองใหบรการมระบบการทำางานแบบ single เครองลกขายนบพน ๆ เครองทตดตอเขามากจะไดรบการใหบรการเพยงเครองเดยวเทานน

วธหนงคอให server run โปรเซสขนมาหนงโปรเซสและรอรบ request เมอไดรบแลว จะสรางโปรเซสแยกออกมาเพอใหบรการในทก request ทขอมา ซงจรง ๆ แลวการสรางโปรเซสในลกษณะนเปนวธแบบธรรมดาทเคยใชกนกอนทจะมระบบ เสนงานขนมาอก การสรางโปรเซสตองใชเวลาในการสรางมากและตองละเอยดถถวน ดงทแสดงใหดในบทกอนหนา ถามโปรเซสใหมถกสรางขนกจะทำางานเหมอนกบโปรเซสเดมทมอยแลว และทำาไมการทำางานแบบนจงไม overhead

4.1.2 ขอไดเปรยบหรอประโยชนของ multithread programming มอย 4 ขอหลก ๆคอ

1. ก�รตอบสนอง (Responsiveness) การทำางานแบบ Multithreading สอสารกนระหวาง application จะยอมใหโปรแกรมรนตอไปไดถาสวนของโปรแกรมถก block หรอมการทำางานหรอรอคำาสงเปนเวลานาน ๆ ดวยวธนจะเพมการตอบสนองไปยง user ตวอยางเชน web browser จะยงคงยอมให user ตดตอกนในหนง thread ในขณะทรปภาพถกโหลดจาก thread อน

Page 3: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

110

2. ก�รแชรทรพย�กร(resource sharing) โดยปกต thread จะแชรมนจะแชรหนวยความจำาและทรพยากรกนเอง ขอดตรงสวนนในการแชร code และ data คอจะยอมให application มหลาย ๆ thread ทแตกตางกนทำางานอยบน space เดยวกน

3. คว�มประหยด (Economy) การแบงหนวยความจำาและทรพยากรตาง ๆ เพอทจะสรางโปรเซสซงเปนการฟมเฟอยและใชเวลามากเพราะวามนแชรและดงขอมลกนอยดงนนการทำางานแบบ multithread จงมความประหยดในการสรางและ context-switch thread

4. ก�รเออเฟ อประโยชนของสถ�ปตยกรรม Multiprocessor ประโยชนของ Multithreading นนมมากมายในสถาปตยกรรม Multiprocessor ซงมนสามารถทำางานคขนานกนไปบนตวสงการทตางกนได แบบ single thread process นนจำาถกจำากดใหทำางานบน CPU ตวเดยวเทานน สวนในแบบ Multithread นนจะทำางานบน CPU หลายตวในเวลาเดยวกนได

4.2 รปแบบหล�ยเสนง�นเราจะอธบายการทำางานของเสนงาน ซงมการพฒนามาตลอด

แตอยางไรกตามการสนบสนนการทำางานของเสนงานจะขนอยกบระดบของผใช (user level) จากเสนงานของผใชหรอจาก kernel แตเสนงานของผใชจะสนบสนนมากกวา kernel และสามารถควบคมโดยไมตองใช kernel support สวนเสนงานของ kernel นนจะสนบสนนและควบคมโดยตรงจากระบบปฏบตการ และเกอบทก

Page 4: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

111

รนของระบบปฏบตการไมวาจะเปน Windows XP, Linux, Mac OS X, Solaris และ Tru64 UNIX ( สมยกอนคอ Digital UNIX ) ทสนบสนนการทำางานของ kernel

ในทสดแลวเสนงานของผใชและเสนงานของ kernel กยงเชอมโยงกนอยด ในสวนนเราจะพสจนความสมพนธซงสามารถแบงออกเปน 3 รปแบบทเปนทรจกกนโดยทวไป

4.2.1 รปแบบหล�ยตอหนง (M:1) รปแบบหลายตอหนง ( รป 4.2 ) หลายเสนงานของผใชจะ

ทำางานกบหนงเสนงานของ kernel ตวจดการเสนงานนนจะแกปญหาจาก thread library ในพนทของผใช ซงมนจะมประสทธภาพมาก แตกระบวนการทงหมดจะกดขวางกน ถาเสนงานไปทำาการกดขวาง system call อกทงเปนเพราะวามเพยงหนงเสนงานทสามารถเขาไปใน kernel ในหนงชวงเวลา เสนงานหลายเสนงานนนไปสามารถทำางานขนานในรปแบบหลายกระบวนการได

Green threads เปน thread library ทสะดวกสำาหรบเครอง Solaris และระบบจำาพวก GNU Portable thread

4.2.2 รปแบบหนงตอหนง (1:1)

Page 5: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

112

รปแบบหนงตอหนง (รป 4.3) จากรปในแตละเสนงานของผใชจะทำางานกบหนงเสนงานของ kernel ซงมนจะจดใหมการทำางานเกดขนพรอมกนมากกวารปแบบหลายตอหนง (M:1) โดยจะปลอยใหเสนงานอนทำางานในขณะทมเสนงานทำางานกบ system call อกทงยงปลอยใหหลายเสนงานนนทำางานในรปแบบขนานของหลายกระบวบการอกดวย มขอเสยเพยงขอเดยวสำาหรบรปแบบนคอ การสรางเสนงานของผใชจะตองสรางเสนงานของ kernel ใหสอดคลองกนเพราะวา การสรางเสนงานของ kernel นนรบผดชอบโดยชน application สวนใหญแลวการจดหารปแบบ การลดคาของ คาสนบสนนเสนงานจะถกกระทำาโดยระบบ ไมวาจะเปนระบบปฏบตการ Linux หรอ Windows กตามซงรวมไปถง Windows 95, 98, NT, 2000 และ XP จะใชรปแบบหนงตอหนง (1:1) เปนเครองมอ

4.2.3 รป แบบหล�ยตอหล�ย (M:M)

รปแบบหลายตอหลาย (รป 4.4) หลายเสนงานของผใชจะทำางานกบเสนงานกบเสนงานของ kernel ทนอยกวาหรอเทากนได จำานวนเสนงานของ kernel บางครงจะถกระบเจาะจงจากชน application หรอ โดยเครอง ( การแบงเสนงาน kernel บน application ในกระบวนการหลายจะแบงไดมากกวาแบบกระบวนการเดยว ) ทรปแบบหนงตอหนง (1:1) เปนทยอมรบโดยผพฒนานนคอการสรางเสนงานทผใชตองการ ถกทวากระบวนการทำางานพรอมกนแตไมไดเขาไปทำางานใน system call พรอมกน

Page 6: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

113

เพราะวา kernel สามารถทจะทำางานกบหนงเสนงานในหนงชวงเวลา รปแบบหนงตอหนง (1:1) ยอมใหเกดการทำางานพรอมกนไดมากแตในการขยายนนจะตองระวงไมใหสรางเสนงานมากเกนไปภายใน application (และในบางกรณอาจมขอจำากดในกระบวนการสรางเสนงาน) รปแบบหลายตอหลาย (M:M) ไมสามารถจดการกบขอบกพรองสองประการคอ ผพฒนาไมจำาเปนตองสรางเสนงานของผใชหลายเสน และเสนงานของ kernel ทคลายกนสามารถทำางานในแบบขนานบนระบบหลายกระบวนกรได อกทงเมอมเสนงานทำางานกบ system call, kernel สามารถทจะดำาเนนการกบเสนงานอนได อกประการหนงคอ แมวาเสนงานของผใชจะมจำานวนมากกวาหรอเทากนกบจำานวนเสนงานของ kernel แตยงยอมรบวาเสนงานของผใชนนมขอบเขตทจำากดตอหนงเสนงานของ kernel ความแตกตางบางอยางเกยวกบรปแบบ two level ( รป 4.5) เปนการรองรบโดยระบบปฏบตการ เชน IRIX, HP-UX และ Tru 64 UNIX ระบบปฏบตการ Solaris รองรบรปแบบ two level ในรนเกากวา Solaris 9 แตอยางไรกตามระบบ Solaris 9 เรมตนใชงานดวยรปแบบหนงตอหนง (1:1)

4.3 Thread Library

Page 7: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

114

Thread Library เปนขอกำาหนดทสรางโดยโปรแกรมเมอร สำาหรบสรางและจดการเกยวกบเสนงาน โดยมสองขนตอนในการทำางานคอ

1. การเขาถงแหลงของขอมลทงหมดในเนอทของผใช โดยไมผาน kernel ทกคาและทกโครงสรางขอมลของแหลงขอมลในพนทของผใช หรอเปนการเรยกจากฟงกชนเฉพาะในพนทของผใชและไมใช system call

2. การเขาถงเครองมอทรบรองแหลงของ kernel โดยตรงดวยระบบปฏบตการ ในสวนนโคดและโครงสรางขอมลสำาหรบแหลงขอมลในพนทของ kernel การเรยกฟงกชนใน API แหลงขอมลแบบธรรมดาจะสงผลใน system call ถง kernel

Thread Library 3 อยางหลก ๆ ทใชในปจจบนคอ1. POSIX Pthreads2. Win323. Java

Pthreads เปนเสนงานมาตราฐานของ POSIX จะจดการเกยวกบระดบของผใช หรอ ระดบของ kernel Threads Library ของ Win32 เปนแหลงขอมลของ kernel level ทสะดวกของระบบวนโดวส เสนงานของจาวาเปน API ทยอมรบในการสรางและจดการเสนงานโดยตรงในโปรแกรมจาวา อยางไรกตาม เพราะวากรณสวนใหญแลว JVM จะเปนตวทำางานทางดานบนสดของระบบ

Page 8: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

115

ปฏบตการ เสนงานของจาวา API นนเปนรปแบบเครองมอทใช threads library ไดสะดวกบนระบบโฮส ซงคลายกบระบบปฏบตการวนโดวส เสนงานของจาวาเปนรปแบบเครองมอทใชในระบบ Win32 API, UNIX และระบบปฏบตการ Linux เชนเดยวกบการใช Pthreads

ในสวนทเหลอของเรองสวนนเราจะอธบายถงการสรางเสนงานพนฐาน ซงใช 3 thread library และมภาพประกอบตวอยาง เราออกแบบโปรแกรมของรปแบบหลายเสนงานเมอทำาการหาผลรวมของคาทเปนจำานวนเตมบวกในเสนงานทใชซงรจกกนในรปฟงกชนการหาผลรวม

จากตวอยาง ถา N มคาเทากบ 5 ในฟงกชนนคาผลรวม จาก 0 ถง 5 คอ 15 โปรแกรมนจะทำางานดวยคาขอบบนของการหาผลรวมขนเสนเสนมาตราฐาน ถาผใชใสคา 8 ผลรวมของจำานวนคาจาก 0 ถง 8 จะออกมาเปนอยางไร

4.3.1 Pthreads Pthreads เปนตวพนฐานของ POSIX ( IEEE

103.1C ) เรยกไดวาเปน API สำาหรบการสรางเสนงานและสงทเกดขนในเวลาเดยวกน เปนตวบงบอกถงพฤตกรรมของเสนงานโดยไมใชเครองมอ การออกแบบระบบปฏบตการมกจะใชเครองมอในงานทตองการ ระบบปฏบตการสวนใหญใช Pthreads เปนเครองมอ ไมวาจะเปน Solaris, Linux, Mac OS X และ Tru64 UNIX Shareware เปนเครองมอทสะดวกในการใชงานทวไปสำาหรบงานทหลากหลายซงดกบ ระบบปฏบตการวนโดวส

โปรแกรมภาษา C ทแสดงในรป 4.6 เปนตวสาธตแบบพนฐานของ Pthreads API สำาหรบสรางโปรแกรมรปแบบหลายเสน

Page 9: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

116

งาน ทเราทำาการคำานวณหาผลรวมของจำานวนเตมบวกในการแบงเสนงาน ในโปรแกรม Pthreads แบงเสนงานและเรมประมวลผล โดยแบงออกเปนฟงกชน ในรป 4.6 สวนของฟงกชน runner() เมอโปรแกรมเรมทำางาน เสนงานเสนหนงจะควบคมการทำางานของ main() หลงจากนน main() จะสรางเสนงานทสองและเรมควบคมการทำางานของฟงกชน runner()

เสนงานสองเสนสามารถใชขอมลรวมกนไดทงหมด เมอเรามองลกลงไปในโปรแกรมจะเหนวา ทกโปรแกรม Pthreads นนจะถกรวบรวมไวในสวนของเฮดเดอรไฟลคอ Pthread.h สวนของ pthreads จะรองรบเกยวกบการจำาแนกของการสรางเสนงาน แตละเสนงานสามารถทจะกำาหนดขนาดของ attribute และตารางการใชขอมล

Pthread_attr_t จะเปนตวแทน attribute ของเสนงาน เราจะกำาหนดคา attribute ในสวนของฟงกชนเรยก pthread_atr_int(&attr) เพราะเราไมสามารถกำาหนดคาของ attribute ไดแนนอน เราสามารถใชคา attribute พนฐานได (ในบทท 5 เราจะอธบายการทำางานของ attribute จาก Pthreads API)

การแบงเสนงานถอเปนการสรางเสนงานดวย pthreads_create() ของฟงกชนเรยก ในการเพมและผานของเสนงาน สามารถจำาแนกเสนงานได อกทงชอของฟงกชนเมอมเสนงานใหมเรมประมวลผล ในสวนนฟงกชน runner() สดทายเราจะสงคาจำานวนเตมคงทไปยงเสนงานทควบคมมน

Page 10: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

117

จดน

โปรแกรมม 2 เสนงานคอ เสนงานพออยใน main() และ เสนงาน

Page 11: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

118

ลก ทำาการรวมการทำางานในฟงกชน runner() หลงจากการสรางเสนงานลก เสนงานพอจะรอคำาสงสนสดการทำางานจากฟงกชน pthread_join() เสนงานลกจะสนสดการทำางานเมอมนเรยกฟงกชน pthread_exit() เสนงานลกสามารถทจะกลบมาทำางานไดอกครงเมอเสนงานพอสงขอมลไปยงสวนของขอมลทใชรวมกน (shared data)

4.3.2 เสนง�นของระบบ Win32 วธการสำาหรบสรางเสนงานทใชในระบบ Win32 วธการจะ

คลายๆ Pthreads ในระบบอน ๆ เราจะรวมไปถงเสนงานระบบ Win32 ในโปแกรมภาษา C ทแสดงดงรป 4.7 จะเหนไดวา เราจะใช Windows.h เปนหวของไฟล เมอใชรปแบบ win32 เปนรปแบบในการนำาเสนอ

Pthreads ทแสดงในรป 4.6 ขอมลถกแบงโดยเสนงานททำาการแบง ในสวนน ผลรวมทงหมดจะรองรบ (ขอมล DWORD) รปแบบเปนจำานวนเตมบวกขนาด 32 บต เราจะอธบายฟงกชน summation() นเปนการทำางานในเสนงานแบง ฟงกชนนเปนการสง pointer ไปยงคาวาง ระบบ Win32 ถกกำาหนดโดย LPVOID การทำางานของเสนงานนฟงกชนทกำาหนดขอมลทงหมด จากผลรวมไปถงคาของผลรวม จาก 0 ถง คาคงททผานไปถงฟงกชน summation()

เสนงานทสรางขนในระบบ Win32 จะใชฟงกชน CreateThread() และใน Pthreads จะกำาหนดขนาด attribute สำาหรบเสนงานทแบงตวสงคาไปยงฟงกชน attribute ทรวบรวมขอมลทปลอดภย ขนาดของขอมลนนจะเพมหรอลดสามารถทจะกำาหนดได ถาเสนงานอยในสถานะรอการทำางาน ในโปรแกรมนเราจะใชคาพนฐาน สำาหรบ attribute น (เราจะกำาหนดคาของเสนงาน ในสถานะรอแทนทเราจะทำามนในตอนท CPU ทำางาน) ชวงทเสนงานลกสราง เสนงานพอจะรอมนทำางานจนสนสดการทำางาน กอนทจะแสดง

Page 12: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

119

คาผลลพธออกมา ซงคานนจะถกกำาหนดโดยเสนงานลก จะถกยกเลกโดยโปรแกรม Pthreads (รป 4.6) เสนงานพอจะรอเสนงานลกใช pthread_join() ซงการทำางานคลายกบระบบ Win32 ทใชฟงกชน WaitForSingleObject() เพราะการสรางเสนงานจะไปปดสวนของการสนสดการทำางานของเสนงานลก (เราจะปองกน การพองกนของวตถ ซงเราจะอธบายเพมในบทท 6 )

4.3.3 เสนง�นของระบบ Java เสนงานเปนรปแบบแรกของการประมวลผลโปรแกรมใน

โปรแกรมจาวา และ ภาษาจาวา และ มนเปนขอกำาหนดลกษณะของกลมสมาชกขนาดใหญในการสรางและจดการเกยวกบเสนงาน ทกโปรแกรมจาวาประกอบไปดวยเสนงานเดยวขนาดเลกทำาการควบคมอย ตวอยางคอโปรแกรมจาวาทมเมธอด main() เพยงอยางเดยวททำางานแบบเสนงานเดยวของ JVM

เราม 2 วธในการสรางเสนงานในโปรแกรมจาวา วธทหนง คอ การสรางคลาสใหมทมาจากเสนงานคลาสเสนงานและผานเมธอด run() อกทางเลอกหนง สามารถควบคมไดหลายผใชซงเปนวธการกำาหนดขอบเขตของคลาสทเปนตวทำางานอย ซงตวททำางานนนเราจะใชเปนตวทเราคดตาม เมอคลาสทำางานมนจะเปนตวกำาหนดเมธอด run() โคดทใชในเมธอด run() เปนอะไรททำาการแบงเสนงาน

Page 13: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

120

คลาสผลรวมทใชแสดงสวนททำางานได การสรางเสนงานเปนการ

Page 14: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

121

ทำางานโดยสวนของการสรางวตถตวอยาง ของคลาสเสนงานและผานการสรางวตถทสามารถทำางานได

การสรางเสนงานทไมเจาะจงการสรางเสนงานใหม ในทางตรงกนขามมนจะเปนเมธอด start() ททำาการสรางเสนงานใหมอยางแทจรง การเรยกเมธอด start() เพอการทำาวตถใหมจะตองใช 2 สงคอ

1). การจดการหนวยความจำาและการเรมใชเสนงาน JVM2). เรยกเมธอด run() ใหเสนงานทำางานทเหมาะสมดวย JVM

( หมายเหต เราไมเคยเรยกใชเมธอด run() โดยตรงหรอในทางตรงกนขามเราเรยกเมธอด start() และมนจะเปนตวเรยก เมธอด run() ตอไป )

เมอโปรแกรมทำางานเสรจ 2 เสนงานทถกสรางโดย JVM อยางทหนง เสนงานพอเรมการทำางานในเมธอด main() อยางทสอง เสนงานจะถกสรางเมอ เมธอด start() ในวตถเสนงานเปนตวเรยก เสนงานลกนจะเรมทำาการประมวลผลในเมธอด run() ของคลาส Summation หลงจากสงคาผลลพธ เสนงานนจะถกกำาจดเมอมนออกจากเมธอด run()

การแบงปนขอมลระหวางเสนงานจะเกดขนงายในระบบ WIn32 และ Pthreads ขอมลทถกแบงปนนนจะถกเปดเผยทวไปอยางแทจรงซงเปนภาษาแนวคดเชงวตถ จาวาไมมแนวคดของขอมลแบบน ถาเสนงานอยางนอยสองเสนงานทำาการแบงปนขอมลในโปรแกรมจาวา การแบงปนขอมลเกดขนจากการสงขอมลจากแหลงทแบงปนขอมลถงเสนงานทเหมาะสม ในโปรแกรมจาวาทแสดงในรป 4.8 เสนงานหลกและเสนงานรองทำาการแบงปนขอมลกนในคลาส sum วตถทถกแบงถกอางองมาจากเมธอด getSum() และ setSum() ( คณจะสงสยวาทำาไมเราไมใชวตถทเปนจำานวนเตม แทนทเราจะใชการออกแบบคลาสใหม มสาเหตมาจากคลาสของ

Page 15: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

122

จำานวนเตมเปลยนแปลงไมได นนคอ คาของขอมลในเซตมนไมสามารถเปลยนแปลงได )

การเรยกเสนงานพอใน Pthreads และ Win32 ใช pthread_join() และ WaitForSingleObject() (ตามลำาดบ) รอเสนงานลกเสรจสนการทำางาน เมธอด join() ในจาวาทำางานคลายกน (ขอสงเกต join() ในจาวาไมใช InterruptedException ซงเราเลอกทจะไมใชมน)

Page 16: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

123

4.4 Threading Issuesในสวนนเราจะมาพดถง บางสวน บางเนอหา ในเรองเกยวกบ

multithreaded program class Sum

Page 17: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

124

{private int sum;

public int getSum(){

return sum;}public void setSum (int sum){

this.sum = sum;}

}class Summation implements Runnable{

private int upper;private Sum sumValue;

public Summation (int upper , Sum sumValue){

this.upper = upper;this.sumValue = sumValue;

}public void run (){

int sum = 0;

for (int i = 0;i <= upper ; i++)sum += i;

sumValue.setSum(sum);}

}public class Driver {

public static void main (String[] args)

Page 18: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

125

{if (args.length > 0){

if (Integer.parseInt(args[0]) > 0)System.err.println(args[0] + "

must be >= 0. ");else{

//create the object to be shared Sum sumObject = new Sum();int upper =

Integer.paseInt(args[0]);Thread thrd = new Thread(new

Summation(upper, sumObject));

thrd.start();try{

thrd.join();System.out.println("The sum

of " + upper + " is " +

sumObject.getSum()); }catch(InterruptedException ie){}

}}

elseSystem.err.println("Usage :

Summation < Integer value >");}

}ตวอยางโปรแกรมภาษา Java ในการหาคาผลรวมของ จำานวน non-

negative

4.4.1 The fork() and exec() System call

Page 19: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

126

ใน บทท 3 เราไดอธบาย ถงหลกการทำางานของการเรยกใช fork ไปแลว ในการชวย แยก และ สำาเนา process โดดถา ม Thread หนงใน program เรยก fork กจะทำากบ process ใหมๆ ซำาๆ ทก Thread หรอ ทำาแคครงเดยว

ระบบปฏบตการ UNIX บางตวมใหเลอก fork ได ทง 2 รปแบบ แบบทหนงคอการทำาซำา ๆ ทก Thread อกแบบคอการเลอกทำาเฉพาะ Thread ท มการเรยกใช fork จากระบบexec system call ทำางานในทางแบบเดยวกบทอธบายไวใน บทท 3 และ ถาม Thread เรยกการ exec จากระบบ โปรแกรมจะมการกำาหนด parameter ไว สำาหรบ exec และจะจดเกบไวใน process ทกครงทมการเรยกใช

ทางเลอก ของ 2 รปแบบในการ fork ขนอยกบ application ถาท exec เรยกนนมขนาดใหญ หลงจากททำาการ fork แลวจะหลกเลยงในการทำาซำาทก Thread และ program จะมการกำาหนด parameter ไว exec เพอจดเกบ process ยกตวอยางการทำาซำาอยางเดยวในการเรยก Thread สมควรเปน โดย ถา process คนละ process กน ไมไดเรยก exec หลงจากการ fork แลว process แตละ process นาจะมการทำาสำาเนาทก ๆ Thread ไว

4.4.2 Cancellation Thread cancellation เปนขนตอนสดทายของ

Thread กอนจะทำางานเสรจสน ยกตวอยาง ในการทำางานหลาย ๆ Thread พรอม ๆ กน การคนหาผาน Database และ Thread หนงมการสงคาผลทไดกลบมา Thread อน ๆ ทเหลอกจะยกเลกการทำางานตอทนท ในรปแบบอนทเกดขนกเมอผใชกดปม Stop บน Web page เมอมการ loading ทตางไปจากทตองการ ในหลาย ๆ ครงจะเหนไดวาเมอมการใชงานใน web browser จะมการแยกกน

Page 20: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

127

โหลดรปภาพ ในหนา นน ๆ แตเมอใดถาผใชกดปม Stop บน web browser ทก Thread ททำางานอยรปในการโหลดรปในหนานนกจะยกเลกการทำางานทนท

บอยครงทการยกเลก Thread เกดกบการทเราเลอกทจะยกเลกเฉพาะ Thread เปาหมายการยกเลก Thread เปาหมายจะเกดขนใน 2 กรณดงน

1. Asynchronous cancellation เปนการเลอกจบ Thread ทมขนาดใหญโตมาก

2. Deferred cancellation เชคดวา Thread นนหมดระยะเวลาเรยกหรอยง หรอ ใกลทจะหมดเวลากใหดวาควรจะหยดการทำางาน ถางานททำาอยเปนงานเกา

ความยากของการ cancellation อยทตำาแหนงทเราจะทำางานยกเลก Thread รวมไปถงการทเราจะยกเลก Thread ไป แลวถาเราตองการทจะกลบไปทำางานตรงสวนนนอกครงจะทำาไดอยางไร บอยครงทระบบตองการทจะกลบไปทำางานสวนทยกเลกไปแตไมสามารถกลบไปใชงานไดดงเดม ดงนนการยกเลกการทำางานของ Thread ทไมสอดคลองกนจงไมเหมาะกบการทำางานในระบบทมขนาดใหญ เมอเรามองตามระบบ cancellation ในขอแตกตางระหวาง thread ทถกยกเลกชใหเหนวาการทเราเลอกทจะยกเลก Thread นน ๆ จำาเปนตองมตวชเอาไว เพอทเราจะสามารถกลบไปทำางานเดมไดอกแมมการยกเลกไปแลว และเพอความปลอดภยกนผดพลาด เราเรยกวา cancellation point

4.4.3 Signal Handling signal ใชในระบบปฏบตการ UNIX เพอบอกถงการทำางาน

ของ process ทกำาลงทำางานอย โดยเฉพาะ signal จะมความสอดคลองหรอไมนนขนอยกบ เหตการณทกำาลงทำางานอย ทก

Page 21: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

128

signal ไมวาจะเปนแบบสอดคลองหรอไมสอดคลอง มรปแบบดงตอไปน

1. signal ทแบงออกตามความจำาเพาะ ของเหตการณ นนๆ2. signal ทแบงออกตาม process ททำางานอย

3. แบงตามประเภท ผใชงาน ทก ๆ signal จะตองมตวควบคม และตวควบคมแบงออกได

ดงน ตวควบคมอตโนมต ตวควบคมทผใชกำาหนด

ทก signal จะมตวควบคมอตโนมต เมอมการทำางานบน kernel เมอมการเรยกใชงาน และการกระทำาพนฐานของ signal จะถกเปลยน เมอม user defined signal handler เขามาควบคมแทน signal จะถกเปลยนเสนทาง บางครง signal กจะถกปลอยไวเฉย ๆ จนมการยกเลกโปรแกรม สำาหรบการใชงานแค Thread เดยวกไมมปญหาในโปรแกรม แตถาเรานำามาใชใน multithread program แลวเราควรจะใชงาน signal อยางไร เมอไหร ตอนไหนท ควรจะสง signal

ตอไปนเปนก�รแบงแบบทวๆ ไปในกรณทสง signal สงใหเฉพาะ Thread ทมการเรยกขอ สงทกๆ ทก ๆ Thread ใน process สงเฉพาะ Thread หนงใน process มอบใหเฉพาะ Thread ทไดรบ signal สำาหรบ

process Method ทใชสำาหรบสง signal นนขนอยกบประเภท ของ

signal ดวย ยกตวอยาง signal ทไมสอดคลอง ตองการทจะสงไปบอกสาเหตท Thread อน ๆ ไมทำางานใน process ไมวาอยางไรกตาม signal ทสงไปนกไมสามารถบอกไดชดเจน แตบาง signal

Page 22: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

129

สามารถสงไปทก ๆ Thread ไดสวนมาก multithread ใน UNIX จะขนอยกบการตอบรบของ signal อาจจะมการปดกนในบางกรณ signal ทไมมความสอดคลอง สามารถสงไปถงเฉพาะ Thread ทไมถกปดกนเทานน อยางไรกตามเพราะ signal จำาเปนตอการควบคม พน ฐาน UNIX จงมคำาสงบางตวทสามารถทำาใหควบคม signal ได ดวยการ kill( aid_t aid , int signal) ใน Window ไมมระบบรองรบ signal เทาไหร จงมการ ใช asynchronous procedure calls( ADC )ในการควบคม Thread ตางๆดเหตการณตาง ๆ ทเกดขน คลาย ๆ กบการควบคมการทำางานของ signal ใน UNIX อยางไรกตาม ADC ใน Window คอนขางมขอจำากดในการใชงาน

4.4.4 Thread Pool ในหวขอ 4.1 ทเรายกตวอยางเกยวกบ web sever ทไดรบ

การตดตอขอรองมา กจะมการสราง Thread ตางๆ เพอทจะไปแกไขปญหาทมเขามา ในทางตรงขาม การสราง Thread ตาง ๆ นนยากกวาการ แตก process อยางแนนอน และปญหาทเกดขนกบการทำา multithread นนกไมไดมนอยเชนกน

ขอ แรก คอปญหาการทเราตองเลอกตดสนใจ เกยวกบชวงเวลา กบความสำาคญของแตละ Thread ในการทเราจะนำาไปจดคว ไวทำางานใหเสรจเปนงาน ๆ ไป อยางทสอง การกงวลกบปญหาบางอยาง ถาเรายอมรบขอเรยกรองทก ๆ ขอทเรยกรองมาก จะทำาใหเราไมมขอบงชถงลำาดบ การกระทำาทจะเขามาทำางานรวมกนในระบบ ทรพยากรเครอง ไมวาจะเปน CPU เวลา หรอ แมกระทงหนวยความจำา จะถกใชหมดไปกบ Thread งานทมจำานวนมหาศาล ดงนนจงมกระบวนการหนงถกนำาขนมาใชเรยกวา Thread Pool

แนวคด thread pool คอการนำาตวเลขมาไวท thread ในแตละ process ทจะทำางานและ จดหาพนททมาสำารองไว คอ pool และใหแตละ thread รอการเรยกใชงานตามตวเลขทไดรบ

Page 23: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

130

เมอ sever มการตอบรบ จากการรองขอ มนกจะออกมาจาก pool มาทำาหนาทใหเสรจแลวตอบกลบเมอทำางานเสรจแลวจงกลบไปท pool เหมอนเดมรอการเรยกครงตอไป แตถา pool เตม ไมสามารถรบ thread ไดแลว ระบบกตองรอจนกวาจะมทวาง จงสามารถทำางานอยางอนได

ประโยชน ของแนวคดน1.ตอบสนองกบสงทเรยกขอเรวกวาเดม2.จำากดการใชทรพยากรในเครองได

ตวเลขของ thread ใน pool สามารถชวยแกปญหาการจดลำาดบในการเรยกใชไดเปนอยางด เพราะไดคำานงถง ปจจยหลาย ๆ ดาน ทงดาน CPU พนทใน memory และ กลมทมความตองการในดานเดยวกน

ใน Win32 API มการจดหา function ทเกยวของกบ thread pool การใช thread pool ใน API การสราง thread นน ม function ในการสรางคอ Thread Create() มการพดถงแลวใน 4.3.2 ตวรปแบบ function ประกอบดวยดงน

DWORD WINAPI PoolFunction ( AVOID Parameter)

{/*** this function runs as a separate thread.**/

}

ตวชใน PoolFunction() จะสงคาหนงไปยง thread pool API แลวจงดำาเนนการตอไป โดยมตว QueueUserWorkItem() เปน function ทอยใน pool API ไวสงคา parameter กลบม 3 ตว ดงน

- LPTHREAD_START_ROURINE เปนตวชไปยง function

Page 24: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

131

- PVOID เปนคา parameter ทตองการสงไปดำาเนนการ

- ULONG เปนตวบงชวาจะดำาเนนการแบบไหน

ตวอย�งก�รสงค� QueueUserWorkItem(&PoolFunction, NULL, 0);

การสราง thread จาก programmer จากการเรยกใช function PoolFunction() ดงตวอยางน ไมมการสงคา parameter ใด ๆ ไป และ Flag เปน 0 คอ ไมไดสงใหทำาคำาสงพเศษ ใด ๆ เราไดสราง thread ทไมไดใสคำาสงพเศษใด ๆ ลงไปขนมาสงอน ๆ ทไดมการจดเกบไวใน Win32 thread pool API กคอสวนทชวยเหลอตาง ๆ ทมประโยชน ในตางชวงเวลาของการเขาถง Thread ของ I/O ใน java.ultil.concurrent package ใน Java 1.5 กไดจดหาสงทมประโยชนและชวยเหลอ ทเกยวกบ thread pool ไวใหดวย

4.4.5 Thread -Specific Data thread เปนสวนหนงของ process ทใชขอมลรวมกบ

process จรง ๆ แลวการทนำาขอมลมาใชรวมกนทำาใหเกดประโยชน ตอการ multithread programming ดวย อยางไรกตาม ในบางสถานการณ thread กสมควรทจะม ขอมลเปนของตวเองโดดชดเจน เราจะเรยกขอมลสวนนวา thread-specific data ตวอยาง ในการดำาเนนการระหวาง process ในระบบ เราควรทจะมการรองรบการดำาเนนการในแตละ thread นอกจากนแตละการดำาเนนการนาจะมสงทบงบอกเปนลกษณะ เฉพาะการเชอโยงแตละ thread ทมความแตกตางกนน เราจะใช thread-specific data

Page 25: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

132

4.4.6 Scheduler Activations สดทายนเราจะพจารณาถงการเชอมตอระหวาง kernel และ thread library ใน multithread programs อยางไหนจะเปนทตองการ ระหวาง many-to-many และ two level model จงมการปรบปรงและเพมเตมใหเปนทยอมรบและกลายเปนรปแบบทดทสด

หลายระบบทมการจดเตรยมรองรบไว เฉพาะ แคแบบใดแบบหนงเทานน ระหวาง many-to-many และ two level model ถาใชโครงสรางทเปนกลางระหวาง ผใชงาน และ kernel thread จะตองม lightweight process หรอ LWP ดงรปทแสดงดานบน (figure 4.9)เปนตวทำาหนาทประสานงานสวนกลาง โดยจะสามารถสรางตาราง Schedule เพอเปนตารางในการควบคมการทำางานของ thread ของ user ได แตละ LWP จะเชอมตอกบ kernel thread และ kernel thread จะเปนตวประมวลผลงานแตละงาน

Page 26: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

133

ทผานเขามาถา มการปดกนเกดขนในชนน ระหวางผใชกบ LWP กจะถกปดไปดวย

แตละ application ตองการลำาดบของ LWP เพอทจะชวยใหสามารถทำางานไดอยางมประสทธภาพ ปกตแลว application ตางๆสามารถทำางานไดถาม LWP เพยงพอ สวน application ทเกยวกบ I/O ทมความละเอยดสง ตองใช LWP หลากหลายตวในการทจะใหสามารถทำางานได

รปแบบหนงในการเชอมตอระหวาง user thread library และ kernel เรยกวา scheduler activation มการทำางานในรปแบบท kernel จะจด application กบผดำาเนนการ (LWPs)และ application สามารถเลอกตาราง user thread ทเหมาะแกการประมวลผล นอกจากน kernel จะตองแจงให application ทราบถงงานทไดรบ ขนตอนนเรยกวา up-call จะมการจดการขนตอนนโดยม thread library และ up-call handler จะทำางานในระบบประมวลผลเสมอนและจะมตวททำาหนาทสงสญญานบอกเมอ application ถก block อกรปแบบหนง kernel จะทำาการ up-call ไปยง application ใหทราบวา thread ถก block และสามารถระบ thread ไดชดเจน kernel จะจดหาตวประมวลผลใหม ให application โดยกอนทจะมาทำางานทหนวยประมวลผลใหม application จะตองจำาสถานะ ในทเดมไว แลวทำาการยกเลกการทำางานทเดม แลวมาทำางานในหนวยประมวลผลใหมแทนการ up-call handle จะมการเลอก application ทมความเหมาะสมทจะขนมาทำางานแทน application เดมทถก block เมอ อยในสถานะ ถก block จะตองรอจนกวา kernel จะเรยกใชงานจงสามารถกลบไปทำางานได

Page 27: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

134

4.5 Operating-System Exampleในสวนน เราจะดวา thread ใน windows XP และ Linux

นนจะมการทำางานอยางไร

4.5.1 Windows XP Thread Windows XP ใชตว implement เปน Win32

Application Programming Interface เปน Library เปน API หลกของตระกลระบบปฏบตการ Microsoft จรง ๆ และจะกลาวถงอะไรในการนำาไปประยกตใชในระบบปฏบตการ

โปรแกรม Windows XP จะทำางานโดยแยกโปรเซสและแตละโปรเซสจะประกอบดวย thread หนง thread หรอมากกวานน Win32 api ทใชในการสราง thread จะอยในหวขอท 4.3.2 Windows XP จะใช การอธบายแบบ one to one หมายถง Kernel thread 1 หนวย กบ User thread 1 หนวย ซงระบบปฏบตการจะยอมให thread อนประมวลผลไดเปนระบบขนาน ททำางานแบบมลตโปรเซสเซอร มการใชหลกการนอยในระบบปฏบตการ Windows ในปจจบน โดยโมเดลนตองไมยอมใหสราง user thread มากเกนไป จะอยในหวขอท4.2.2

องคประกอบทวไปของ Thread มดงน Thread ID เปนตวบงบอกถง Thread แตละตว Register เปนการเซทตวแทนคาของตวคำาสง User stack จะถกใชเมอ thread ทำางานอยใน user

mode และ kernel stack จะถกใช เมอ thread ทำางานอยใน kernel mode Private storage area register set, stacks และ Private storage area รวม

เรยกวา context of the threadsโครงสรางขอมลหลกของ thread ประกอบดวย:

Page 28: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

135

ETHREAD (executive thread block) KTHREAD (kernel thread block) TEB (thread environment block)

องคประกอบขอ ETHREAD ประกอบไปดวย pointer ทเปนตวชโปรเซสของ thread และ หนาทของ Address ซง ควบคมโดย thread start control ETHREAD โดยสวนใหญจะม pointer ทสอดคลองกนคอ KTHREAD KTHREAD ประกอบดวย ตารางและขอมลทสอดคลองกนของ thread และยงม kernel stack ทจะทำางานใน mode kernel ตวชไปยง TEBETHREAD และ KTHREAD ทอยใน kernel space นนหมายความวามนจะอยเฉพาะใน kernel เทานน

TEB คอโครงสรางขอมลทอยใน user-space ทผานเขามาเมอ thread ทำางานอยใน user mode ในขณะทมนอยในพนทอนทไมใช user space มนจะประกอบดวยตวช thread user mode stack และ array สำาหรบ thread

4.5.2 Linux Threads Linux มกจะเรยกวา task มากกวาเรยกวา thread การ

สราง thread ใช clone() system call clone() ยอมให child task ใช address space รวมกนกบ parent task (process) ตวอยางเชน ถา cone() ผานแลว flag ของ CLONE_FSCLONE_VMCLONE_SIGHAND และ CLONE_FILES task ของ parent and child จะแชรขอมลระบบไฟลเดยวกน ใชหนวยความจำา

Page 29: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

136

เดยวกน ใชตวสงสญญาณเดยวกน และตดตงการเปดไฟลเหมอนกน การใชClone() ทเปนทนยมเทากบเปนการสราง Thread (จะอธบายในบทน )เมอ parent task แชรทรพยากรสวนใหญใหกบ child task อยางไรกตามถาไมเซทรปแบบของ Flag เมอทำาการ clone()มนจะทำาใหไมสามารถแชรไดผลลพธในฟงกชนนคลายกบการเรยกใช fork()

ระดบของการแชรมดวยกนหลายระดบซงเปนไปไดเพราะวางานททำาแทนอยใน Linux kernel โครงสรางขอมล kernel พเศษนมอยในแตละ task ในระบบ โครงสรางขอมลนเปนเหมอนการเกบขอมลของ task เอาไว ซงม pointer เปนตวชไปยงโครงสรางขอมลอนทขอมลเหลานถกเกบไวตวอยางเชนโครงสรางขอมลของการแทนแบบ list ผลคอ จะม task ใหมถกสรางขนมา และมการสำาเนาขอมลทงหมดของโครงสรางขอมลของ parent process ทมความเกยวเนองกนไปควบคกน task ใหมทสรางขนมาเมอทำาการ clone() จะถกสรางขนมาอยางไรกตามมนแทนทจะสำาเนาขอมลทงหมดของโครงสรางขอมล ใหกำาหนดจดของ task ใหมไปยงโครงสรางขอมลของ parent task ขนอยกบเซทคาของ flag ใหผาน ในการ clone()

สรปThread เปนการควบคมการทำางานภายในของโปรเซส

Multithreaded โปรเซสจะประกอบไปดวย thread ททำาหนาทตางกนแตทำางานอยบน address เดยวกนขอดของ Mulithreding ประกอบไปดวย การเพมการตอบสนองตอผใช ทงแชร ทรพยากรในโปรเซส ความประหยดและความสามารถของ task ในสถาปตยกรรมแบบ Multiprocessor

Page 30: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

137

ในระดบของ user thread คอสงทโปรแกรมเมอรมองเหนและ ระบบปฏบตการ kernel จะสนบสนนจดการในระดบ kernel โดยทวไปแลว user-level จะเรวกวาในการสรางและจดการมากกวา kernel thread และไมกาวกายสงท kernel ตองการ

3 รปแบบทแตกตางกนของ ความสมพนธของ model ระหวาง user thread กบ kernel thread ดงน

1. Many-to-one model หมายถง Kernel thread 1 หนวย กบ User thread หลายหนวย เปนการออกแบบทจะยอมใหเพยง thread เดยวทเขาถง kernel ในกรณท thread ไป block system call จะทำาให process ทงหมดถก block ไปดวย โดยโมเดลนยอมใหสราง user thread ไดตามตองการ แตไมสามารถประมวลผลไดพรอมกน เพราะยอมใหเขาใช kernel thread ไดครงละ thread เทานน

2. One-to-one model หมายถง Kernel thread 1 หนวย กบ User thread 1 หนวย ซงระบบปฏบตการจะยอมให thread อนประมวลผลไดเปนระบบขนาน ททำางานแบบมลตโปรเซสเซอร มการใชหลกการนอยในระบบปฏบตการ Windows ในปจจบน โดยโมเดลนตองไมยอมใหสราง user thread มากเกนไป

3. Many-to-many model หมายถง โมเดลทลดขอจำากดของ 2 แบบแรก ผใชสามารถสราง user thread เทาทจำาเปน และสมพนธกบ kernel thread ทรบการทำางานแบบขนานในแบบมลตโปรเซสเซอร เมอม thread ท block system call ทาง kernel จะจดเวลาให thread อนเขามาประมวลผลกอนได

ระบบปฏบตการททนสมยสวนใหญจะให kernel สนบสนน thread ในระบบ OS แบบ Windows 98 NT 2000 และ XP และยงม Solaris ของ Linux อกดวย

Page 31: Multithreaded Programmingbls.buu.ac.th/~f52325/report_last_semester/%BA%B7%B7%D5... · Web viewMultithreaded Programming 4.1 บทนำ ในอด ตการประมวลผลเป

138

thread library จะใหโปรแกรมเมอรทจดการเกยวกบ application เพอสรางและจดการเกยวกบ thread Thread Library มอย3 สวนหลก ๆ คอ

POSIX Pthreads Win32 threads Java threads