หน้า: [1] 2 3
 
ผู้เขียน หัวข้อ: PHP กำลังจะตาย?  (อ่าน 22339 ครั้ง)
0 สมาชิก และ 1 ขาจร กำลังดูหัวข้อนี้
ผมสอน asp.net มานานมากๆ(ตั้งแต่มี asp ธรรมดา เกือบ 10 ปีแล้วมั้ง)
แต่ความที่เป็นระบบเปิดและ OpenSource ของ PHP ผมก็เลยมีหนังสือ(text)ของ PHP (น่าจะรุ่น 2 หรือ 3) กับเขาบ้าง
ใช้งาน PHP ได้แบบพื้นฐาน..
พอรู้ว่า PHP6(5.5) จะสนับสนุน unicode และ PHP5 สนับสนุนการเขียนโปรแกรมแบบ OOP ได้เป็นอย่างดี
ก็เลยลงทุนซื้อหนัง PHP ใหม่(เสียที)เป็น PHP5 อ่านไปได้นิดๆหน่อยๆ... (เกือบ 2 พัน  (เหงื่อแตกพลั่ก))

วันนี้นึกครึมอกครึมใจเลยอยากรู้ว่า 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 ขณะที่หัวข้อเป็น Multithread เริ่มบทความก็บอกว่าทำ MultiThread ไม่ได้ซะแล้ว
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
พอหาข้อมูลเปรียบยิ่งน่าตกใจที่กลุ่มคนที่สนใจ python กับ ruby กับเริ่มมากกว่า PHP (แต่งานของ PHP มากกว่าอยู่นะ)
http://www.odinjobs.com/blogs/careers/entry/how_does_perl_php_python

« แก้ไขครั้งสุดท้าย: 15 ก.ค. 2008, 00:43 น. โดย ลุงซัน » บันทึกการเข้า

http://www.ThaiBuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย
Multithread  คืออะไรเหรอครับลุงซัน  (เหงื่อแตกพลั่ก)

กำลังจะหัดเขียน php อย่างจริงจังซะด้วยซิ

จะทำเว็บตัวเอง โฮส asp ถูกๆ หายากจริงๆ  เศร้า



เอ่อ อ่านแล้วงงครับ thread กับ process ต่างกันยังไงครับ
บันทึกการเข้า

กาก
แบบนี้ก็แย่น่ะสิ -*-" ตายละตู..
บันทึกการเข้า
คงต้องมาภาษาอื่นบ้างแล้วซิ  (เหงื่อแตกพลั่ก)
บันทึกการเข้า

Multithread  คืออะไรเหรอครับลุงซัน  (เหงื่อแตกพลั่ก)
process=การทำงานของโปรแกรม คือ โปรแกรมเริ่มทำงานก็มี process เกิดขึ้น สมัยก่อนการเขียนโปรแกรม server จะอาศัยการสร้างตัวเอง(fork)ขึ้นมาเพื่อรองรับงานที่เพิ่มขึ้น(child process) เช่น web server พอเริ่มทำงานก็จะมี process เดียว พอเกิด connection เพิ่ม ก็จะ fork ตัวเอง มารับ connection ที่เพิ่มขึ้น

thread=ส่วนของการทำงาน ซึ่งจะอยู่บน process เดียวกัน(ใช้พื้นที่ร่วมกันบางส่วน เช่น หน่วยความจำ) ทำให้ทำงานได้เร็วและมีประสิทธิภาพ(แต่เขียนโปรแกรมยากกว่า)

เอา vdo ของตาคนนี้ไปดู น่าจะพอได้ครับ

threads and processes
<a href="http://www.youtube.com/v/oRH0XYcm9Xw&amp;hl=en&amp;fs=1" target="_blank">http://www.youtube.com/v/oRH0XYcm9Xw&amp;hl=en&amp;fs=1</a>

threads and processes part 2
<a href="http://www.youtube.com/v/qpDSKKkf5IM&amp;hl=en&amp;fs=1" target="_blank">http://www.youtube.com/v/qpDSKKkf5IM&amp;hl=en&amp;fs=1</a>

ข้อมูลเพิ่มเติมของ process และ thread (เรียนในวิชา OS)
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/

« แก้ไขครั้งสุดท้าย: 14 ก.ค. 2008, 23:12 น. โดย ลุงซัน » บันทึกการเข้า

http://www.ThaiBuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย
ขอบคุณครับลุงซัน  ไหว้ + อ่านแล้ว ยังมึนๆนิดๆ เดี๊ยวดูวีดีโอต่อ

เห็นมีวงเล็บว่า (เรียนในวิชา OS)  คือผมไม่ได้จบคอมมาอ่ะครับ  เศร้า

บันทึกการเข้า

กาก
ถ้าเอาแบบง่ายๆ

1 process (โปรแกรมที่เริ่มทำงานแล้ว) มีส่วนการทำงาน(units of execute) แค่อันเดียว เราก็เรียกว่า single thread

ถ้า 1 process (โปรแกรมที่เริ่มทำงานแล้ว) มีส่วนการทำงาน(units of execute) หลายส่วน(หน่วย) เราก็เรียกว่า multi thread (ใช้งานได้ดีกับ CPU ที่มี HyperThreading หรือแบบ MultiCore)
« แก้ไขครั้งสุดท้าย: 14 ก.ค. 2008, 23:21 น. โดย ลุงซัน » บันทึกการเข้า

http://www.ThaiBuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย
แปลสั้นๆ ว่าโครงสร้างภาษามันไม่สนับสนุนซีพียูหลายๆ หัวใช่ไหมครับ

แล้วยังงี้เกิดมันออกรุ่นใหมขึ้นมา (สมมติ php7) มันจะสนับสนุนได้ไหมครับ
หรือมันผิดตั้งแต่เกิดแล้ว
บันทึกการเข้า

ทำมาหากินด้วยการเปิดร้านสกรีนเสื้อยืด จ้ะ
ถ้าเอาแบบง่ายๆ

1 process (โปรแกรมที่เริ่มทำงานแล้ว) มีส่วนการทำงาน(units of execute) แค่อันเดียว เราก็เรียกว่า single thread

ถ้า 1 process (โปรแกรมที่เริ่มทำงานแล้ว) มีส่วนการทำงาน(units of execute) หลายส่วน(หน่วย) เราก็เรียกว่า multi thread (ใช้งานได้ดีกับ CPU ที่มี HyperThreading หรือแบบ MultiCore)

อ๋อ ประมาณว่า thread เป็นซับเซ็ทของ process ใช่ไหมครับ ขอบคุณครับ  ไหว้
บันทึกการเข้า

กาก
php มันออกแบบ threading model ไว้สำหรับเป็น sub process ของ web server อยู่แล้วนี่ครับ?


ให้ตัว web server จัดการเรื่อง thread ไปเลย ส่วน php ก็ process เฉพาะเว็บ
บันทึกการเข้า



ชั้นเกลียด python  ชิ



เขียนไม่เป็น  ชิ ชิ ชิ
บันทึกการเข้า

เราจะต้องการอะไรมากมายไปกว่า อะไรมากมาย
แปลสั้นๆ ว่าโครงสร้างภาษามันไม่สนับสนุนซีพียูหลายๆ หัวใช่ไหมครับ
ใช่เลยครับ
แอบอ้าง
แล้วยังงี้เกิดมันออกรุ่นใหมขึ้นมา (สมมติ php7) มันจะสนับสนุนได้ไหมครับ
ได้ครับ
แต่คนคิดคนแรกเริ่ม ไม่ทำแล้ว (Rasmus Lerdorf,PHP1-2)
คนที่ทำปัจจุบันก็เป็นบริษัทซะแล้ว (Zeev Suraski and Andi Gutmans = Zend Technologies)
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 (งานเป็นลักษณะเวปหน้าต่อหน้า)

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 ไว้(ตอนตอบคุณแอนนนนน) แต่โดนตัดหน้า  (อิอิ)

http://www.oreillynet.com/cs/user/view/cs_msg/25764 มีคนเคลมว่า JAVA เหมาะกว่า(ก็แน่นอน)



http://simonwillison.net/2004/Mar/31/phpAndApache2/ ทำไม PHP ไม่เหมาะกับ apache2
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 ต้องปรับและใช้รุ่นให้ถูกต้อง

เอาเป็นว่าอย่าตกใจมากเกินไป
เพราะงานส่วนใหญ่ก็อาศัย OS/Web Server ช่วย (แม้ PHP จะทำได้แค่ process)

« แก้ไขครั้งสุดท้าย: 15 ก.ค. 2008, 00:21 น. โดย ลุงซัน » บันทึกการเข้า

http://www.ThaiBuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย
แปะ

 กรี๊ดดดดด ขอบคุณสำหรับความรู้ครับ ลุงซัน
บันทึกการเข้า

ก่อสร้างกับทำลาย เหมือนที่ลงมือ ต่างที่การกระทำ
เพิ่งเรียนมาเลย 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://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/ Fork PHP! (and speed up your scripts)
http://sandro.groganz.com/weblog/2003/09/09/multithreading-in-php/
http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2
http://firsttube.com/read/PHP-Lesson-2-Threading
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.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://talks.php.net/show/srm-webtech2005
« แก้ไขครั้งสุดท้าย: 15 ก.ค. 2008, 00:55 น. โดย ลุงซัน » บันทึกการเข้า

http://www.ThaiBuddy.com (ฟรีดิกชันนารี่ ชี้แล้วแปล)
ผมรู้เล็กน้อย
หน้า: [1] 2 3
 
 
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines | Thai language by ThaiSMF Valid XHTML 1.0! Valid CSS!