Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: PAIN1 в May 10, 2006, 17:59



Титла: Php и нещо подобно на threads при java
Публикувано от: PAIN1 в May 10, 2006, 17:59
Съществува ли подобно нещо в php, защото не намирам, поне не със същото име?


Титла: Php и нещо подобно на threads при java
Публикувано от: в May 10, 2006, 20:35
До колкото работя на тях (а на мен това ми е работата) мисля, че в пхп няма нишки - пхп е скриптов език, а за  нишки са необходими обекти! Не че в пхп няма такива, но не са така мощни и добре организирани. Все пак ако греша и намериш инфо, постни тук за да се науча и аз. За какво са ти, мога да помогна.


Титла: Php и нещо подобно на threads при java
Публикувано от: PAIN1 в May 10, 2006, 22:00
за спорта реших си напиша прост чат клиент.
На Java съм го писал това, но тук нещо не мога да се усетя.
Клиента трябва едно временно да слуша на сокета си и да чете, но как да го накарам и да слуша и клавиатурата, оставя ли го да чака за вход от клавиатурата ще си седи там, та търся начин двете неща да работят паралелно.
Ако изобщо се изказвам правилно .....
Сега се опитвам да се обясня какво е това fork при php, но не намирам свястна и пълна документация. Опитвам се да разбера и това pcntl (от едното стигнах до другото и третото, но каква им е връзката и дали ще ми свършат работа).


Титла: Php и нещо подобно на threads при java
Публикувано от: Hapkoc в May 12, 2006, 10:46
Михаиле, изобщо не си прав, че за да има поддръжка на нишки ти трябват обекти. Двете неща нямат нищо общо.

Има библиотеки за работа с нишки на C (примерно pthread), който в никакъв случай не е обектно-ориентиран език.


По въпроса - fork() прави следното - създава нов процес, копие на родителския (този, от който се извиква fork()) като връща на процеса-родител идентификатора на новия процес, а на процеса-дете връща 0.

$ man fork

В PHP виждам, че функциите за контрол на процеси са с префикс pnctl, т.е. fork() в PHP е pnctl_fork(), но прави същото.

А конкретната задача идея си нямам как може да се реализира с PHP, но определено не мисля, че си избрал верния език.





Титла: Php и нещо подобно на threads при java
Публикувано от: astronom в May 12, 2006, 11:26
Цитат (PAIN1 @ Май 10 2006,22:00)
за спорта реших си напиша прост чат клиент.
На Java съм го писал това, но тук нещо не мога да се усетя.
Клиента трябва едно временно да слуша на сокета си и да чете, но как да го накарам и да слуша и клавиатурата, оставя ли го да чака за вход от клавиатурата ще си седи там, та търся начин двете неща да работят паралелно.
Ако изобщо се изказвам правилно .....

Така като те слушам май се опитваш да направиш java applet с PHP. Само дето трудно ще постигнеш същата архитектура на приложението. Как искаш да постигнеш "клиентско" приложение с PHP, когато това е език, който най-често се изпълнява на сървъра?
Цитат (PAIN1 @ Май 10 2006,22:00)
Сега се опитвам да се обясня какво е това fork при php, но не намирам свястна и пълна документация. Опитвам се да разбера и това pcntl (от едното стигнах до другото и третото, но каква им е връзката и дали ще ми свършат работа).

Всяка функция на PHP е добре документирана и има примери. В случая (fork) става въпрос за ситемна функция в *IX среда. Наркос правилно ти е казал, че фукциите за контрол на процеси в PHP са с префикс pcntl_.


Титла: Php и нещо подобно на threads при java
Публикувано от: PAIN1 в May 12, 2006, 11:56
1. що се отнася че всяка функция е добре документирана, повечето са, но не всички !
2. За избора на език, знам че не е най-подхосящия, просто реших да го пробвам, очевидно и ще го зарежа :)
3. Не се опитвам да правя Java аплет с PHP-то.
Мерси на всички, очевидно няма да го бъде :)


Титла: Php и нещо подобно на threads при java
Публикувано от: в May 12, 2006, 12:32
Сега остава важния въпрос: threads vs processes

Аз лично предпочитам втория вариант и то поради следните няколко причини:

1) Няма вариант един форк-нат процес да ти смаже цялото приложение.
2) Това че не могат да се споделят структури от данни (отделните процеси си имат отделни адресни пространства) не означава че не може  да комуникират ефективно помежду си - има си доволно много IPC механизми - кеф ти shared memory, сокети (UDS/TCPIP), пайпове, семафори, дори файлове - ся сигурно не е толкова удобно, но като функционалност е същата работа.
3) Предпочитам ядрото да се занимава с отделните процеси отколкото програмата да се занимава с нишките си - на SMP/NUMA системи предимството от това е огромно. Не виждам начин отделните нишки да се изпълняват на отделни процесори, но знам ли все пак може някой гениален мозък да се е сетил, хех
4) За пхп не знам, но на С има доволно много варианти за нишки - pthreads, NPTL, дори сам можеш да си измислиш нещо с помощта на clone() - функция, подобна на fork() с разликата че процесът споделя всичко с родителя си - файлови дескриптори, адресно пространство, PID, етц...с тази разлика че за комуникацията м/у отделните такива "нишки" и за стабилността на така направените "нишки" трябва сам да се погрижиш...и при все това не знам някой да се е засилил да прави тред-нати приложения. Едва наскоро направиха тред-нат apache за лайнукс.
5) уиндоуски и джава подходи - майната им, може да са нещо прекрасно ама мене лично не ми допадат.

И съжалявам за флейма, знам че ся ще се намерят хора да спорят за тва, няма да си променя мнението по въпроса :)


Титла: Php и нещо подобно на threads при java
Публикувано от: PAIN1 в May 12, 2006, 23:24
Това означава ли, че с fork() и разделянето на процесите може да се постигне това което писках ?


Титла: Php и нещо подобно на threads при java
Публикувано от: в May 13, 2006, 13:54
"Не виждам начин отделните нишки да се изпълняват на отделни процесори" жалко че не виждаш,защото е много близо до очите и сам си го написал...ядрото може се занимава с отделни процеси ,както и с отделни нишки!