GotoKnow
  • เข้าระบบ
  • สมัครสมาชิก
  • แผงจัดการ
  • ออกจากระบบ
GotoKnow

PHP, Queue และ Multithread บน Windows ตอน 3

เมื่อวันก่อน บทความPHP, Queue และ Multithread บน Windows ตอน 2 ทิ้งข้อสังเกตุไว้ว่า curl_multi_exec ทำงานช้ากว่า curl_exec?? เพราะอะไร?

เมื่อวานนี้ บทความPHP, Queue และ Multithread บน Windows ตอน 2 ทิ้งข้อสังเกตุไว้ว่า curl_multi_exec ทำงานช้ากว่า curl_exec?? เพราะอะไร?

 

"คราวนี้... curl_multi_exec ทำงานช้ากว่า curl_exec?? เพราะอะไร? ผมยังไม่ทราบแน่ชัดเช่นกัน น่าจะมีหลายสาเหตุ
- อาจเป็นเพราะเป็นการทำงานพร้อมกัน เปิด thread มากเกินไป
- web server ตอบสนอง HTTP request ไม่ทัน
- scripts ทำงานช้าเอง หรืออาจเป็นข้อจำกัดของ cURL ใน PHP ที่อาจมีการกำจัดจำนวนของ thread ในขณะหนึ่ง
- เกิด dead lock ระหว่างแต่ล่ะ thread "

Server ที่ใช้ทดสอบ
CPU : Pentium 4 3.0
RAM : 1GB

ผมได้ส่ง HTTP Request เข้าไปพร้อมกัน จำนวน 500 request
คำตอบคือ
- web server ตอบสนอง HTTP request ไม่ทัน
user posted image

การที่ WebServer ไม่ได้รวม CGI engine เป็นไปส่วนหนึ่งของ Web Server (Module)
ทำให้มี overhead ในการ load script interpreter ขึ้นมาทำงาน

เมื่อ scripts ที่ 1 ส่ง http request ไปยัง web server ในขณะที่ web server กำลังประมวลผลนั้น ก็มีอีก request หนึ่งส่งตามเข้ามา หาก php-cgi.exe มีการใช้หน่วยความจำ 7 mb ต่อ 1 request และ server มีหน่วยความจำ 1GB นั่นหมายความว่า server ควรจะรองรับได้ราวๆ 142 request
แต่ในความเป็นจริงๆ จะได้ราว 250 - 300 เนื่องจาก พอ script 1 เสร็จ ก็จะจบการทำงาน พร้อมกับรับ process ต่อไป

เมื่อเราคำนวณว่า server ควรจะรับจำนวน request ได้เป็นจำนวนเท่าไหร่ เราจึงไปกำหนด
จำนวน request ที่ server จะรองรับได้ในเวลาเดียวกัน
user posted image
ซึ่งค่าตรงนี้ โดยปกติ จะเป็น unlimited ซึ่งหาก Server ไม่มีการจัดการ http request จำนวนมากๆ ในเวลาเดียวกันได้ Server จะทำงานช้า จนไม่ตอบสนอง ในขณะที่ php-cgi ก็ยังไม่หยุดการทำงาน และรอ web server อยู่


บางที การใช้ PHP ISAPI น่าจะช่วยให้ Server ทำงานได้ดีกว่า ซึ่งผมยังไม่ได้ทดลองครับ

UPDATE บังเอิญว่า Server นี่มีการใช้งานอยู่ ผมเลยทดสอบต่อไม่ได้ ไว้จะมาเล่าสู้กันฟังอีกรอบ.... ไม่ใช่อะไรครับ คนอื่นเข้าไม่ได้ มันไม่ตอบสนอง

บันทึกนี้เขียนที่ GotoKnow โดย 

คำสำคัญ (keywords): phpcurlthreadmultithreadlibcurl
หมายเลขบันทึก: 39578
เขียน:
แก้ไข:
ความเห็น: 1
อ่าน:
สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ

ความเห็น (1)