General

อ่าน Python Thread Programming

บอกก่อนเลยว่า บทความนี้ ไม่ใช่ Tutorial แค่อยาก Share ความรู้สึกเท่านั้น พอดีในงานที่ทำอยู่ ออกแบบใช้ Thread ใน Python เพื่อสร้าง Server รองรับคำสั่ง Blar Blar .. ทำให้ต้องมานั่งศึกษา แต่โชคดีที่ คุ้นเคยกับ POSIX Thread ใน GNU C – Linux มาบ้าง

(ขอบคุณภาพจาก http://evanjones.ca/software/python-workqueue.html)

สำหรับ Concept ของ Thread ยังคงเหมือนเดิม Parallel Programming / Thread Programming

  • งานเข้ามา ทำขนานกัน รอจนเสร็จทุกงานจึงจบโปรแกรม – Create / Join Thread
  • หากมีตัวแปร ค่าที่ต้องใช้ร่วมกันระหว่าง Thread ล่ะ ? – Resource Sharing – ให้ดูเรื่อง Lock , RLock , Semaphore
  • หากต้องการสื่อสารระหว่าง Thread ?- Thread Synchronization – ดู Event , Condition Variable

เรื่องน่าสนใจ

1) RLock หรือ Re-Entrance Lock .. ไม่เคยเห็นมาก่อน เพิ่งจะรู้จัก ซึ่งมีขึ้นเพื่อแก้ปัญหาของ Lock .. ลองดูที่ [1] จะเห็นว่า การมี RLock ช่วยให้เขียนโปรแกรมง่ายขึ้นนั่นเอง

lock = threading.Lock()
lock.acquire()
lock.acquire() # this will block

lock = threading.RLock()
lock.acquire()
lock.acquire() # this won’t block

2) ประยุกต์ใช้งาน Semaphore .. ปรกติที่เคยใช้ คือ Model Consumer/Producer แบบ Init ค่า = 0 .. เช่น Thread A มีข้อมูลเข้ามา 1 ชุด ก็ให้ Thread A สั่ง Count Up เพื่อบอกให้ Thread B นำไปประมวลผลต่อ .. พอ Thread B ทำเสร็จแล้ว จะสั่ง Count Down … แต่ที่ได้จาก [1] เพิ่มขึ้นมาคือ Init ค่า = n .. เช่น n = 10 .. มี Web Server รองรับการให้บริการได้ 10 Connections พร้อมกันเท่านั้น … มี Connection เข้ามาก็ Count Down .. พอเสร็จงานแล้วก็ Count Up .. หากเป็น 0 จะไม่สามารถให้บริการได้

อ้างอิง

Technorati : ,
Del.icio.us : ,

Advertisements
มาตรฐาน

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s