ผมสอน asp.net มานานมากๆ(ตั้งแต่มี asp ธรรมดา เกือบ 10 ปีแล้วมั้ง)
แต่ความที่เป็นระบบเปิดและ OpenSource ของ PHP ผมก็เลยมีหนังสือ(text)ของ PHP (น่าจะรุ่น 2 หรือ 3) กับเขาบ้าง
ใช้งาน PHP ได้แบบพื้นฐาน..
พอรู้ว่า PHP6(5.5) จะสนับสนุน unicode และ PHP5 สนับสนุนการเขียนโปรแกรมแบบ OOP ได้เป็นอย่างดี
ก็เลยลงทุนซื้อหนัง PHP ใหม่(เสียที)เป็น PHP5 อ่านไปได้นิดๆหน่อยๆ... (เกือบ 2 พัน :44:)
วันนี้นึกครึมอกครึมใจเลยอยากรู้ว่า PHP สนับสนุนการเขียนโปรแกรมแบบ Multithread หรือไม่?
ผลคือ ไม่ เป็นสิ่งที่สร้างความตระหนกกับผมมากๆ
เพราะอะไรนะหรือ? เพราะถ้าโปรแกรมไม่ support Multithread
การมี CPU แบบ multicore (ซึ่งเป็น trend ของ CPU แทนการเพิ่มความเร็ว)จะไม่มีประโยชน์อะไรเลย
ผมเลยลองๆหาข้อมูลดู ก็มีหลายคนเริ่มกังวลว่าสุดท้าย PHP จะแพ้ Programming อื่นๆเพราะ CPU แบบ MultiCore เนี่ยแหละ
การที่เราซื้อ Server แบบหลาย Core (เช่น Xeon series 3,5,7) จะไม่มีประโยชน์อะไรกับ PHP เลย แต่ช่วยเรื่อง OS/Web Server.. (โปรดอ่าน note ที่ตอบคุณแอนนนนนด้านล่าง)
มีหลายคนที่พยายามทำให้ PHP ทำงานได้หลาย Process (Process นะ ไม่ใช่ Thread) ก็ไม่มีผลกับ CPU แบบหลาย Core แค่แก้ปัญหาการเขียนโปรแกรม PHP แบบมีหลายกระบวนการหรือการทำงานหลายอย่างพร้อมกัน..
เช่น
http://mjgp2.matthewpainter.com/2007/12/how-to-multi-thread-using-php.html (http://mjgp2.matthewpainter.com/2007/12/how-to-multi-thread-using-php.html) ขณะที่หัวข้อเป็น Multithread เริ่มบทความก็บอกว่าทำ MultiThread ไม่ได้ซะแล้ว
http://www.electrictoolbox.com/article/php/process-forking/ (http://www.electrictoolbox.com/article/php/process-forking/) การสร้าง process หลายๆอัน (fork) ซึ่งเป็นเทคนิคการเขียนโปรแกรมบน unix มาตลอด(แม้แต่ web server ยุคแรกๆก็ใช้ fork) แต่มันเป็น process
วันนี้ก็มาถึงบางอ้อว่าทำไม google ถึงไม่ใช้่ PHP (ใช้ python แทน) ยกเว้นบริษัทที่ซื้อมา(เช่น youtube)
และเริ่มเข้าใจว่าทำไมขณะที่ PHP ออกจะดังและมี SourceCode มากมาย แต่ก็มี python กับ ruby มาทาบรัศมี (ส่วนหนึ่งก็เพราะ multithread)
http://wiki.w4py.org/python-vs-php.html (http://wiki.w4py.org/python-vs-php.html)
พอหาข้อมูลเปรียบยิ่งน่าตกใจที่กลุ่มคนที่สนใจ python กับ ruby กับเริ่มมากกว่า PHP (แต่งานของ PHP มากกว่าอยู่นะ)
http://www.odinjobs.com/blogs/careers/entry/how_does_perl_php_python (http://www.odinjobs.com/blogs/careers/entry/how_does_perl_php_python)
(http://www.odinjobs.com/blogs/careers/resource/comp-lang-membership.gif)
Multithread คืออะไรเหรอครับลุงซัน :44:
กำลังจะหัดเขียน php อย่างจริงจังซะด้วยซิ
จะทำเว็บตัวเอง โฮส asp ถูกๆ หายากจริงๆ :16:
เอ่อ อ่านแล้วงงครับ thread กับ process ต่างกันยังไงครับ
แบบนี้ก็แย่น่ะสิ -*-" ตายละตู..
คงต้องมาภาษาอื่นบ้างแล้วซิ :44:
อ้างคำพูดจาก: กาปอกของถลุก เมื่อ 14 ก.ค. 2008, 22:03 น.
Multithread คืออะไรเหรอครับลุงซัน :44:
process=การทำงานของโปรแกรม คือ โปรแกรมเริ่มทำงานก็มี process เกิดขึ้น สมัยก่อนการเขียนโปรแกรม server จะอาศัยการสร้างตัวเอง(fork)ขึ้นมาเพื่อรองรับงานที่เพิ่มขึ้น(child process) เช่น web server พอเริ่มทำงานก็จะมี process เดียว พอเกิด connection เพิ่ม ก็จะ fork ตัวเอง มารับ connection ที่เพิ่มขึ้น
thread=ส่วนของการทำงาน ซึ่งจะอยู่บน process เดียวกัน(ใช้พื้นที่ร่วมกันบางส่วน เช่น หน่วยความจำ) ทำให้ทำงานได้เร็วและมีประสิทธิภาพ(แต่เขียนโปรแกรมยากกว่า)
เอา vdo ของตาคนนี้ไปดู น่าจะพอได้ครับ
threads and processes
http://www.youtube.com/v/oRH0XYcm9Xw&hl=en&fs=1
threads and processes part 2
http://www.youtube.com/v/qpDSKKkf5IM&hl=en&fs=1
ข้อมูลเพิ่มเติมของ process และ thread (เรียนในวิชา OS)
http://en.wikipedia.org/wiki/Thread_%28computer_science%29 (http://en.wikipedia.org/wiki/Thread_%28computer_science%29)
http://vishnu.sut.ac.th/eng/cpe/2007/uploads/manual_upload/ProjectOSTerm1_49/Project49/PG02_Sec1/ (http://vishnu.sut.ac.th/eng/cpe/2007/uploads/manual_upload/ProjectOSTerm1_49/Project49/PG02_Sec1/)
ขอบคุณครับลุงซัน :46: + อ่านแล้ว ยังมึนๆนิดๆ เดี๊ยวดูวีดีโอต่อ
เห็นมีวงเล็บว่า (เรียนในวิชา OS) คือผมไม่ได้จบคอมมาอ่ะครับ :16:
ถ้าเอาแบบง่ายๆ
1 process (โปรแกรมที่เริ่มทำงานแล้ว) มีส่วนการทำงาน(units of execute) แค่อันเดียว เราก็เรียกว่า single thread
ถ้า 1 process (โปรแกรมที่เริ่มทำงานแล้ว) มีส่วนการทำงาน(units of execute) หลายส่วน(หน่วย) เราก็เรียกว่า multi thread (ใช้งานได้ดีกับ CPU ที่มี HyperThreading หรือแบบ MultiCore)
แปลสั้นๆ ว่าโครงสร้างภาษามันไม่สนับสนุนซีพียูหลายๆ หัวใช่ไหมครับ
แล้วยังงี้เกิดมันออกรุ่นใหมขึ้นมา (สมมติ php7) มันจะสนับสนุนได้ไหมครับ
หรือมันผิดตั้งแต่เกิดแล้ว
อ้างคำพูดจาก: ลุงซัน เมื่อ 14 ก.ค. 2008, 23:18 น.
ถ้าเอาแบบง่ายๆ
1 process (โปรแกรมที่เริ่มทำงานแล้ว) มีส่วนการทำงาน(units of execute) แค่อันเดียว เราก็เรียกว่า single thread
ถ้า 1 process (โปรแกรมที่เริ่มทำงานแล้ว) มีส่วนการทำงาน(units of execute) หลายส่วน(หน่วย) เราก็เรียกว่า multi thread (ใช้งานได้ดีกับ CPU ที่มี HyperThreading หรือแบบ MultiCore)
อ๋อ ประมาณว่า thread เป็นซับเซ็ทของ process ใช่ไหมครับ ขอบคุณครับ :46:
php มันออกแบบ threading model ไว้สำหรับเป็น sub process ของ web server อยู่แล้วนี่ครับ?
ให้ตัว web server จัดการเรื่อง thread ไปเลย ส่วน php ก็ process เฉพาะเว็บ
ชั้นเกลียด python :11:
เขียนไม่เป็น :11: :11: :11:
อ้างคำพูดจาก: ไอ้แอนนนนน เมื่อ 14 ก.ค. 2008, 23:22 น.
แปลสั้นๆ ว่าโครงสร้างภาษามันไม่สนับสนุนซีพียูหลายๆ หัวใช่ไหมครับ
ใช่เลยครับ
อ้างอิง
แล้วยังงี้เกิดมันออกรุ่นใหมขึ้นมา (สมมติ php7) มันจะสนับสนุนได้ไหมครับ
ได้ครับ
แต่คนคิดคนแรกเริ่ม ไม่ทำแล้ว (Rasmus Lerdorf,PHP1-2)
คนที่ทำปัจจุบันก็เป็นบริษัทซะแล้ว (Zeev Suraski and Andi Gutmans = Zend Technologies)
http://en.wikipedia.org/wiki/php (http://en.wikipedia.org/wiki/php)
อ้างอิง
หรือมันผิดตั้งแต่เกิดแล้ว
ใช่เลยครับ
ต้องเกิดใหม่(ปรับโครงสร้าง)
ซึ่งจะทำให้ใช้ไม่ได้กับของเดิม (ไม่ compatible)
ปัจจุบันแค่ PHP5 ก็มีคนใช้น้อย(เหตุผลหลักเพราะ hosting ยังมีอยู่มากที่สนับสนุน PHP4.x และ PHP4.x ก็ทำงานที่ต้องการได้แล้ว)
ปัญหาของการที่คนใช้ PHP5 จำนวนไม่มาก กับ การมีจุดอ่อนเมื่อเทียบกับภาษาที่เกิดใหม่
การเปลี่ยนโครงสร้างอาจทำให้ดับดิ้นสิ้นใจไปก่อน(เหมือน PERL ซึ่งได้รับความนิยมน้อยลงมากๆ)
PERL มีข้อดีเรื่อง regular expression แต่ภาษาใหม่ก็ทำได้ (PHP ก็มีส่วนเพิ่มของ regular expression)
ปัญหาคือถ้าข้อดีโดนแทนที่(ปัจจุบันก็คงเป็นเรื่อง SourceCode เครื่องมือจำนวนมาก)ภาษาใหม่ๆจะเข้ามาแทนที่ทันที
note: แม้ว่า PHP จะมีจุดอ่อน แต่คงโตไปอีกพักใหญ่ๆ เพราะงานส่วนใหญ่ไม่ต้องการ multithread (งานเป็นลักษณะเวปหน้าต่อหน้า)อ้างคำพูดจาก: icez เมื่อ 14 ก.ค. 2008, 23:45 น.
php มันออกแบบ threading model ไว้สำหรับเป็น sub process ของ web server อยู่แล้วนี่ครับ?
ตัว PHP ไม่ได้ออกแบบสำหรับ threading model (นั้นแหละที่ทำให้ผมตระหนก)
แต่ OS/Web Server สามารถช่วยเรื่อง MultiThread ได้ครับ (แต่ไม่ดีเท่าภาษาที่ใช้) คือ PHP เป็น process ในแต่ละ Thread ของ web server
อ้างอิง
ให้ตัว web server จัดการเรื่อง thread ไปเลย ส่วน php ก็ process เฉพาะเว็บ
อันนี้ใช่เลยครับ เป็นสาเหตุหลักให้ PHP อยู่รอดได้ยาวไกล(ขนาดนี้)
แต่ถ้าเมื่อไรเราต้องการให้ตัว app ต้องทำงานหลายๆส่วน(ซึ่ง trend ก็เป็นแนวนี้ เช่นการทำงานในลักษณะคล้าย AJAX คือไม่เปลี่ยนหน้า ต้องมีบันทึกข้อมูลหรือติดต่อผู้คนหลายๆคนในเวลาเดียวกัน ต้องใช้ multithread
หรือใช้เทคนิคตามบทความด้านบน แต่ไม่ได้ใช้ power ของ multicore CPU ช่วย)
ก่อนตอบของคุณ icez ผมได้เขียน note ไว้(ตอนตอบคุณแอนนนนน) แต่โดนตัดหน้า :43:
http://www.oreillynet.com/cs/user/view/cs_msg/25764 (http://www.oreillynet.com/cs/user/view/cs_msg/25764) มีคนเคลมว่า JAVA เหมาะกว่า(ก็แน่นอน)
http://simonwillison.net/2004/Mar/31/phpAndApache2/ (http://simonwillison.net/2004/Mar/31/phpAndApache2/) ทำไม PHP ไม่เหมาะกับ apache2
http://th2.php.net/manual/en/install.php (http://th2.php.net/manual/en/install.php)
Warning
We do not recommend using a threaded MPM in production with Apache 2. Use the prefork MPM instead, or use Apache 1. For information on why, read the related FAQ entry on using Apache2 with a threaded MPM
http://th2.php.net/manual/en/install.unix.apache2.php (http://th2.php.net/manual/en/install.unix.apache2.php) ต้องปรับและใช้รุ่นให้ถูกต้อง
เอาเป็นว่าอย่าตกใจมากเกินไป
เพราะงานส่วนใหญ่ก็อาศัย OS/Web Server ช่วย (แม้ PHP จะทำได้แค่ process)
แปะ
:25: ขอบคุณสำหรับความรู้ครับ ลุงซัน
เพิ่งเรียนมาเลย multithread
เพราะว่าตัว lab views ที่จะทำโปรเจค เค้าโปรโมตเรื่องนี้ละ
ว่าสามารถเลือกได้ ว่าชุดคำสั่งไว้ ทำงาน core อะไรแบบนั้น
มาให้ข้อมูลเพิ่ม
1.ทำไมนึกครึมอกครึมใจกับ multithreading กับ PHP
เพราะเคยเห็น project เขียน game server แบบ MMORPG ด้วย python แต่ PHP ไม่ได้ยินข่าวเลย
สรุป python มัน general purpose กว่า PHP(เน้นเขียนเวป) และสนับสนุน multithread
2.ถ้าจะทำ PHP เพื่อการทำงานหลายๆส่วนพร้อมกันก็มีทางออก (แต่เวปทั่วๆไป ไม่จำเป็นมากนัก)
Question:
Is there a way to do a form of threading in PHP?
Say for instance you write a PHP application to monitor a service on a number of servers, it would be nice to be able query a number of servers at the same time rather then query them one-by-one.
Can it be done?
http://netevil.org/blog/2005/may/guru-multiplexing (http://netevil.org/blog/2005/may/guru-multiplexing) บทความนี้น่าสนใจดี
---------------
http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html (http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html)
http://immike.net/blog/2007/04/08/fork-php-and-speed-up-your-scripts/ (http://immike.net/blog/2007/04/08/fork-php-and-speed-up-your-scripts/) Fork PHP! (and speed up your scripts)
http://sandro.groganz.com/weblog/2003/09/09/multithreading-in-php/ (http://sandro.groganz.com/weblog/2003/09/09/multithreading-in-php/)
http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2 (http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2)
http://firsttube.com/read/PHP-Lesson-2-Threading (http://firsttube.com/read/PHP-Lesson-2-Threading)
http://www.ibuildings.com/blog/archives/811-Multithreading-in-PHP-with-CURL.html (http://www.ibuildings.com/blog/archives/811-Multithreading-in-PHP-with-CURL.html)
http://www.wellho.net/forum/Writing-PHP/Objects-multithreaded-web-servers-and-persistance.html (http://www.wellho.net/forum/Writing-PHP/Objects-multithreaded-web-servers-and-persistance.html)
http://www.vl-srm.net/doc/user.introduction.php (http://www.vl-srm.net/doc/user.introduction.php) มีคนตั้งคำถามว่า SRM คือคำตอบ? แต่มันไปไหนซะละ
SRM is written in C for better performance, threading, and sockets control.
Another feature of SRM is it's ability to handle all persistent database connections, offering a significant advantage in a variety of situations.
http://www.vl-srm.net/ (http://www.vl-srm.net/)
http://talks.php.net/show/srm-webtech2005 (http://talks.php.net/show/srm-webtech2005)
:46: ขอบคุณครับจารย์ซัน
นี่ขนาดผมไม่รู้เรื่องนะเนี่ย
อ่านๆ ไปเหมือนกำลังเรียนวิชาอะไรสักอย่างเลยครับ
สนุก ตื่นเต้น เร้าใจ :30:
หน้าตาของคนทำ PHP (มาพูดเรื่อง PHP6)
http://www.builderau.com.au/video/embed/22433657
ืnote:กำลังคิดว่าจะกระโดดไป PHP6 เลยดีไหม(เพราะมี feature หลายอันที่น่าสนใจเช่น unicode,build-in caching)
http://php6dev.blogspot.com/ (http://php6dev.blogspot.com/)
http://davidwalsh.name/upcoming-php6-additions-changes (http://davidwalsh.name/upcoming-php6-additions-changes)
ส่วนตัวผมคิดว่า ถ้า php ไม่คิดจะเจาะตลาด general purpose programming
คือปล่อยให้เป็น web programming 100% อย่างนี้ ก็คงใช้ model แบบเดิมได้
(ปล่อยให้ web server จัดการ thread)
แต่ถ้าจะทำ high performance computing สำหรับรับงานโหดบัดซบ
ประเภทเว็บ google ไรเงี้ย ผมว่า php ก็ไม่ค่อยเหมาะครับ
สาเหตุหลักเพราะเรื่อง scalability เลย
คุมเว็บใหญ่ๆ เยอะ เจอข้อจำกัดของ php แบบยุบยับไปหมดเลย
อ้างคำพูดจาก: icez เมื่อ 15 ก.ค. 2008, 01:53 น.
ส่วนตัวผมคิดว่า ถ้า php ไม่คิดจะเจาะตลาด general purpose programming
คือปล่อยให้เป็น web programming 100% อย่างนี้ ก็คงใช้ model แบบเดิมได้
(ปล่อยให้ web server จัดการ thread)
แต่ถ้าจะทำ high performance computing สำหรับรับงานโหดบัดซบ
ประเภทเว็บ google ไรเงี้ย ผมว่า php ก็ไม่ค่อยเหมาะครับ
สาเหตุหลักเพราะเรื่อง scalability เลย
คุมเว็บใหญ่ๆ เยอะ เจอข้อจำกัดของ php แบบยุบยับไปหมดเลย
เห็นด้วยอย่างยิ่ง
หรือเพราะผมคิดมากไป(คิดใหญ่เกินไป) :43:
เลยกังวลมากไป
ตอนนี้ที่อยากได้ที่สุดคือ วิธี load balancing ของ php แบบง่ายสุดๆ
ให้ไม่ต้องนั่ง sync ข้อมูลข้ามเครื่องอยู่ นึกแล้วปวดหัวมากมาย T_T
อ้างคำพูดจาก: icez เมื่อ 15 ก.ค. 2008, 01:57 น.
ตอนนี้ที่อยากได้ที่สุดคือ วิธี load balancing ของ php แบบง่ายสุดๆ
ให้ไม่ต้องนั่ง sync ข้อมูลข้ามเครื่องอยู่ นึกแล้วปวดหัวมากมาย T_T
แยก tier ก็ทำได้แล้ว? sync ข้อมูล? ขยายความหน่อยครับ..
http://porteightyeight.com/archives/121-The-Hitchhikers-Guide-to-PHP-Load-Balancing.html (http://porteightyeight.com/archives/121-The-Hitchhikers-Guide-to-PHP-Load-Balancing.html)
อืม ไม่เคยคิดเรื่องอะไรอย่างนี้มาก่อน สักแต่ว่าจะใช้ส่วนใหญ่ :31:
เอาความรู้อันน้อยนิดคิดมาได้อย่างนี้
php มันเน้นเอามาใช้ในด้าน web app เรียกว่าเกือบจะ 100%
แล้วก็ทำงานแบบเป็นเบี้ยล่าง web browser อีกที
ผ่านมากี่ปีกี่ปี งานด้านนี้มันก็ยังซ้ำซาก วนเวียนอยู่ในแบบเดิมๆ
แต่ในขณะภาษาอื่น อย่าง python ruby มีการขยับขยายตัวและทำได้มากกว่าทำเว็บ ???
php เกิดมาเพื่องานเว็บตั้งแต่เริ่ม และเกิดบน unix
ซึ่งพื้นฐานโปรแกรมบน unix ส่วนใหญ่มัน fork ???
(มี ??? เพราะผมไม่มั่นใจ :30:)
ไม่ได้เรียนคอมแต่ก็พอรู้เรื่องมาบ้าง เพราะ apache แท้ๆ เลย
มันมี prefork กับ worker
แต่ส่วนใหญ่เขาแนะนำให้ใช้ prefork มากกว่า worker ที่เป็น multithread
โดยให้เหตุผลว่า unix ยังมีการจัดการเรื่อง memory กับ thread ยังไม่ดีพอ ???
เรื่อง thread ยังเป็นรอง windows อยู่อีกมาก ???
(มี ??? อีกแล้ว :30:)
อ้างคำพูดจาก: นายโอ้เอ้ เมื่อ 15 ก.ค. 2008, 02:12 น.
php มันเน้นเอามาใช้ในด้าน web app เรียกว่าเกือบจะ 100%
แล้วก็ทำงานแบบเป็นเบี้ยล่าง web server อีกที
ก็เพราะเน้นการใช้หน้าเวปเป็นหลักทำให้มีข้อจำกัดเยอะ
อ้างอิง
ผ่านมากี่ปีกี่ปี งานด้านนี้มันก็ยังซ้ำซาก วนเวียนอยู่ในแบบเดิมๆ
งานเวปกำลังเปลี่ยนไปเยอะ(หลังจากการมาของ web 2.0 กำลังไป web 3.0 และ Software as a service (SaaS))
เราคงต้องยอมรับว่าเวปกลายเป็น Interface ที่คนทั่วไปยอมรับ(ใช้ง่าย ใช้สะดวก และ ใช้ได้ทุกที่ทุกเวลา)
ปัญหาคือระบบที่ภายใต้ข้อมูลของเวปนั้นมีอีกมากมาย
โดยเฉพาะการวางโครงสร้างไอที ซึ่งตอนนี้นิยมใช้เป็น SOA
http://en.wikipedia.org/wiki/Service-oriented_architecture (http://en.wikipedia.org/wiki/Service-oriented_architecture)
http://mfatix.com/home/node/112 (http://mfatix.com/home/node/112) <- vdo น่าสนใจดี
http://blog.middleware.co.th/2007/07/soa-1.html (http://blog.middleware.co.th/2007/07/soa-1.html)
ระบบเริ่มเข้าสู่การให้บริการเป็นหลัก(Service-Oriented)
โดยการพัฒนาระบบเน้นเรื่อง agile development ไม่งั้นไม่ทันการ
ก่อนที่จะไป agile development ฐานของมันก็คือ OOP และ Pattern Design
แต่ PHP แทบจะไม่รองรับ OOP เลย(จนถึง PHP5) นั้นเป็นปัญหาที่ผมไม่ได้จับ PHP อย่างแข็งขัน
เดิมผมจับ .net ซึ่งมี solution ค่อนข้างครบ(แต่คงเทียบกับ JAVA ตอนนี้ไม่ได้)
และ .net ก็มีกับ windows ซึ่งเราก็รู้ว่า friendly กับคนไทยมากๆ(ไม่ว่า interface หรือ engine ของภาษาไทย การตัดคำ database/searching ..etc)
ผมหันมาหา PHP เพราะ license ของ windows/MS SQL นั้นแพงมหาโหดสำหรับคนไทย
แต่พอมาจับก็พบว่า PHP นั้นเหมาะแค่ web applications ไม่เหมาะกับการ implement ทั้งระบบ(แม้ว่าจะเป็นระบบที่ใช้เวปเป็นหลัก)
core หลายอย่างยังต้องใช้ภาษาอื่นช่วย (กะจะฝากผีฝากไข้กับ PHP ซะหน่อย เพราะวัยเริ่มเกินที่จะเรียนรู้อะไรใหม่ๆมากมาย :05:)
อ้างอิง
แต่ในขณะภาษาอื่น อย่าง python ruby มีการขยับขยายตัวและทำได้มากกว่าทำเว็บ ???
จริงๆทั้ง python และ ruby ก็เกิดมาในยุดของเวป
แต่เพียงเขาไม่ได้จำกัดแค่ web application เลยทำให้งานอื่นทำได้ดีกว่า PHP (เช่นสร้าง SOA สำหรับให้บริการ services ต่างๆของ web applications อีกที)
อ้างอิง
php เกิดมาเพื่องานเว็บตั้งแต่เริ่ม และเกิดบน unix
ซึ่งพื้นฐานโปรแกรมบน unix ส่วนใหญ่มัน fork ???
อันนี้คงไม่ใช่เหตุผลหลัก
เพราะแม้กระทั่ง PERL ซึ่งเกิดขึ้นก่อนยังมี multithread
http://www.perl.com/doc/manual/html/lib/Thread.html (http://www.perl.com/doc/manual/html/lib/Thread.html)
PHP ซึ่งเกิดจากการแทนที่ PERL เป็นหลัก(เพื่อทำ homepage ส่วนตัวและนับจำนวนผู้เข้าใช้งาน,ประวัติ PHP) ไม่ได้วางโครงสร้างที่ดีไว้ก่อนเลยไม่รองรับระบบขนาดใหญ่
ชื่อของ PHP คือ personal home page ซึ่งเป็นการบอกกลายๆว่าเป็นเวปสำหรับบุคคล(ตอนหลังเปลี่ยนคำเต็มเป็น PHP:Hypertext Preprocessor)
อ้างอิง
ไม่ได้เรียนคอมแต่ก็พอรู้เรื่องมาบ้าง เพราะ apache แท้ๆ เลย
มันมี prefork กับ worker
แต่ส่วนใหญ่เขาแนะนำให้ใช้ prefork มากกว่า worker ที่เป็น multithread
โดยให้เหตุผลว่า unix ยังมีการจัดการเรื่อง memory กับ thread ยังไม่ดีพอ ???
เรื่อง thread ยังเป็นรอง windows อยู่อีกมาก ???
การใช้ fork ไม่ใช่ไม่ดี
การใช้ fork แยก child process ออกจาก process หลัก ทำให้ผลกระทบของ child process ไม่กระทบกับ process หลัก
ถ้า main process กับ child process สนับสนุน multithread ก็จบ เพราะจะใช้ประโยชน์ของ multicore ได้เต็มประสิทธิภาพ
เรื่องที่ใช้ prefork มากกว่า worker
เป็นเพราะระบบใช้ PHP เป็นหลัก(ซึ่่ง PHP ไม่สนับสนุนการทำงานแบบ multithread และ ได้ออกคำเตือนสำหรับ apache 2.0 ดังที่ผมกล่าวก่อนหน้านี้
Warning
We do not recommend using a threaded MPM in production with Apache 2. Use the prefork MPM instead, or use Apache 1. For information on why, read the related FAQ entry on using Apache2 with a threaded MPM
http://th2.php.net/manual/en/install.unix.apache2.php (http://th2.php.net/manual/en/install.unix.apache2.php)
จริงๆแล้วการใช้ worker ดีกว่า prefork มาก ลองดูผลของการทดลองของคนนี้ดู
http://www.camelrichard.org/apache-prefork-vs-worker (http://www.camelrichard.org/apache-prefork-vs-worker)
So for this setup, the worker MPM was almost twice as fast as the prefork.
unix ทำ fork และ multithread ดีกว่า windows เยอะ
แต่ที่เราไม่ได้ยินเรื่อง fork ของ windows เพราะ windows ทำไม่ได้(ต้องเสริม)เลยได้ยิน windows คู่ multithread ตลอด
สนใจแฮะครับ
ผมอ่านเหมือนจะรู้เรื่องเลยครับ :30:
พออ่านจบ ถามตัวเองว่า เข้าใจมั๊ย :44:
แต่น่าสนใจครับ
เหมือนพี่แอนว่าครับ ตื่นเต้น เร้าใจ :43:
ผมว่าน่าจะอีกนานอยู่นะ
กว่าเว็บเล็กๆน้อยจะหันไปสนใจเรื่องใหญ่ๆพวกนี้
แล้วตอนไหน?
ผมคิดว่า คงรอให้มีเว็บเกลื่อนโลก
จนทำให้เว็บโหลดช้าลง
คนจึงจะหันไปสนใจเทคโนโลยีที่จะมาทำให้เว็บตัวเองประมวลผลเร็วขึ้น โหลดเร็วขึ้น
:33:
ขอบคุณลุงซันมากครับ เปิดโลกขึ้นอีกเยอะเลย :46:
ด้วยความเคารพครับ :46:
ลุงซัน เจ๋งโคตรๆครับ :12:
ผมไม่เจ๋งหรอกครับ มีคนเจ๋งกว่าผมอีกมากมายมหาศาล (แต่ผมไม่ชอบพวกชุบทองนะ ประเภทโดนปะทะแล้วทองลอก)
------
พอเจอว่า PHP ไม่ support multithread ก็เลยลองหาทางเลือก ดูเรื่อง scalability
ลองดูภาษาทีมาแรงเช่น Ruby กับเจอว่า ไม่ค่อยมีกรณีที่เป็นระบบใหญ่
http://www.rubyonrailscamp.com/Scalability+and+Performance+Testing (http://www.rubyonrailscamp.com/Scalability+and+Performance+Testing)
No large projects have been tried yet with rails
แต่ก็เวปขนาดใหญ่ที่เขียนด้วย ruby on rail คือ twitte แต่เบื้องหลังก็มีภาษา Erlang (http://www.erlang.org/) ที่ถือว่าเป็นสุดยอดของเรื่องการรับงานโหดๆ(เป็นภาษาที่ใช้ในระบบโทรศัพท์ของ Ericsson แล้วมา opensource ให้้ใช้กัน)
มีใครเขียน Erlang เป็นก็สอนหน่อยนะครับขี้เกียจนั่งอ่าน
ส่วน python ที่เห็นชัดๆก็ google,google video (youtube ก็ไป python แล้ว?)
แต่ PHP ก็มีมากไม่น้อย flickr ก็เขียนด้วย PHP
yahoo,digg ก็ PHP
จริงๆก่อนจะจับ PHP ก็ศึกษากรณีต่างๆหลายกรณีเพื่อความมั่นใจและพบว่าเวปขนาดใหญ่ก็ใช้ PHP
ยิ่งเจอ Tim Bray พูดเรื่อง JAVA เทียบกับ PHP ยิ่งไปกันใหญ่
http://blog.thinkphp.de/archives/170-Keynote-of-Tim-Bray-some-interesting-comparison-between-PHP,-Rails-and-Java.html (http://blog.thinkphp.de/archives/170-Keynote-of-Tim-Bray-some-interesting-comparison-between-PHP,-Rails-and-Java.html)
สรุปว่า PHP สามารถใช้ได้กับระบบใหญ่ แต่อาจไม่เหมาะกับงานที่เป็น Core หลัก(แต่จริงๆแล้วส่วนมาก Core หลัก ก็คือ database)
go ahead ต่อกับ PHP เนี่ยแหละผม เพราะหาเหตุผลประกอบหลายๆอย่างเช่น
1.ถ้าจะทำระบบที่ซับซ้อนขึ้นก็คงหาคนช่วยได้ง่าย
2. SourceCode (ทั้งฟรีและ commercial) มีเยอะมากๆ
3. แห่งข้อมูลและเอกสารมีเยอะจริงๆ
-----------------
note:
ถ้าผมจะแต่งหนังสือเกี่ยวกับการออกแบบระบบใหญ่ๆสักเล่มจะมีคนสนใจไหมครับเนี่ย (หรืออาจจะมาเขียนเป็นตอนๆในหิ้งคอมฯก็ได้)
สนใจมากๆ เลยครับ :25:
:25: สนใจครับ
ถึงจะไม่ค่อยเข้าใจ แต่ก็สนใจอยากศึกษาบ้างครับ :12:
:25: สนใจครับ
งงมาก - งงมากที่สุด
php ยังงูงู ปลาปลา
งั้นรีบไปเรียนภาษาอื่นก่อนดีกว่า
จองหนังสือเลยได้ไหมคะ ลุงซัน
:27: :27: :27:
ยิ่งกว่าสนใจอีกครับ :25:
ลองดูนะครับ
ผมตั้งกระทู้ใหม่(แต่ไปที่หิ้งคอมไม่ได้)
http://www.f0nt.com/forum/index.php/topic,13549.0.html (http://www.f0nt.com/forum/index.php/topic,13549.0.html)
ไม่รู้ถูกจู๋มั้ย แต่ไม่อยากตั้งใหม่ :56:
คือว่าเจอปัญหากับการ upload นิดหน่อยครับ
คำสั่ง move_uploaded_file() มันไม่รองรับภาษาไทยน่ะครับ
return ค่า false ออกมาแต่ก็ดันก็อปไฟล์สำเร็จ ผิดก็แค่ชื่อกลายเป็นต่างดาว
เปลี่ยนไปใช้ copy() ก็เป็นแบบเดียวกัน
มีวิธีแก้มั้ยครับ
charset หน้าเว็บเป็น TIS-620 รึเปล่าครับ
ถ้าใช่ แก้เป็น UTF-8 ซะนะครับ
อ่อๆ ได้แล้วครับ หน้าเว็บเป็น utf-8 อยู่แล้ว
แล้วคำสั่ง move_uploaded_file() ไม่รองรับ utf-8 :08:
พอพี่ไอซ์บอกเลยลองไปหาทาง convert charset ดู
ลองไปเรื่อย ปรากฎว่า แปลง utf-8 เป็น windows-874 แก้ปัญหาได้ครับ :25:
$filename = iconv('UTF-8','windows-874',$_FILES['Filedata']['name']);
ป.ล. แต่ดัน return ค่า false ออกมาเหมือนเดิม เลยใส่คำสั่ง file_exists() ไปอีกบรรทัดเพื่อเช็คว่าอัพสำเร็จมั้ย
ถ้ารันบน linux ไฟล์มันต้องเป็น utf นะถึงจะเรียกใช้ได้
ไม่งั้นชื่อไฟล์มันจะเป็นตัวยึกยือ
ส่วน windows ... จะเรียกว่ามันฉลาดพอรึเปล่าดีก็ไม่รู้
มาอ่านบทความของตัวเองอีกครั้ง (หลังจากมีการขุดขึ้นมา)
ก็แอบขำๆ ตัวเองที่ตั้งโจทย์กับตัวเองว่า PHP กำลังจะตาย หรือปล่าว?
อาจเพราะช่วงนั้น (ปี 2008) PHP โดนโจมตีอย่างหนัก (ทำ scalability ได้ไม่ดี, ทำ multithread ไม่ได้)
แต่วันนี้ก็พิสูจน์ได้แล้วว่า PHP นั้นยิ่งใหญ่ไม่แพ้ใคร (แต่ ruby กับอ่อนแรงลงอย่างมาก)
ก็ขอโทษที่ตั้งกระทู้ทำให้คนที่จะศึกษา PHP อาจชะงักไป ด้วยครับ
กลับมาอ่านอีกครั้งก็เลยอยากอัพเดทข่าวเล็กๆน้อยๆ
- ตัวอย่างการใช้ภาษา PHP (ใช้ภาษานะ ไม่ได้ใช้ Engine) ที่ใหญ่ที่สุดตอนนี้ก็คงไม่พ้น Facebook โดย Facebook เขียนตัวแปลง PHP เป็น C++ แล้วทำการ compile อีกทีหนึ่ง จึงทำให้ข้อด้อย(เรื่อง Intrepeter ของ PHP หมดไป) เครื่องมือที่ทำคือ HipHop for PHP (เผื่อใครจะเอาไปใช้ทำให้เว็บแอ๊ฟของตัวเองเร็วปรี๊ด)
บล็อกผู้พัฒนา (http://developers.facebook.com/blog/post/358/)
Wiki และ ที่ Download HipHop (https://github.com/facebook/hiphop-php/wiki/)
ส่วน compiler ตัวอื่นๆของ PHP ดูได้ที่ PHP Wiki (http://en.wikipedia.org/wiki/PHP) ในหัวข้อ Compiler
- PHP6 ซึ่งมีตำราหลายเล่มออกขาย ไ้ด้หายไปจากระบบแล้ว ทั้งนี้เพราะทุกอย่างที่คาดว่าจะมีใน PHP6 โดยเฉพาะเรื่อง Unicode/internationalization มีอยู่ใน PHP 5.3 เรียบร้อยแล้ว (มีการคาดว่า PHP 5.4 คือรุ่นที่จะมีคุณสมบัติใน PHP6 ที่คาดไว้เดิมครบถ้วน)
ข่าว Where is PHP 6? (http://blog.internetnews.com/skerner/2009/10/where-is-php-6.html)
จะเห็นว่า snapshot ของ PHP 6 (http://snaps.php.net/) หายไปแล้ว
- เรื่อง Scalability/Multithread ที่อาจเป็นจุดอ่อน PHP ได้รับการแก้ไขโดยใช้ระบบ เช่น code/page cache, memory cache , sharding, compilter/JIT ..etc โดยเฉพาะการหันมาใช้แนวทางของ google (MapReduce) ในการเก็บข้อมูล โดยมีสาย noSQL หลายๆค่ายเริ่มใช้งานจริงๆจัง (เช่นใน facebook ,Twitter ..etc)
ขออัพเดทข่าว และ ขออภัยที่อาจตั้งกระทู้ไม่เหมาะสม :46:
ขอตามอ่านเลยครับ กำลังสนใจ PHP สุดๆ :25:
เพิ่งศึกษาได้ไม่นาน ตอนนี้กำลังสนุก :53: