作者clifflu (缺钱啦 @@)
看板PHP
标题Re: [请益] multithread
时间Tue Oct 25 20:30:46 2005
※ 引述《ojinjin (小欧)》之铭言:
: ※ 引述《clifflu (缺钱啦 @@)》之铭言:
: : 2. 如果 httpd 是使用 apache 的话, 每一个 request 是来自一个 thread (吧 XD)
: : 3. php 能够以 pcntl_fork 的方式产生 process.
: : 4. 你也可以透过 execution 的方式, 产生子 process.
: : 你也可以决定母 process (.php) 要不要等子 process 跑完.
: : 如果你有某些演算法, 需要多个 thread 来增进效能的话,
: : 建议用其他语言在 server side 写出程式由 php 呼叫,
: : 另写一页面用以取得执行结果, 会比较适合. (尚未完成时显示执行进度是个好主意)
: 感谢您的回覆 :)
: 我的状况是假设在网页上,
^^^^^^
: 使用者执行了一个需要花数天执行的功能,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
既然如此, #3 跟本不会是个好主意.
: 而使用者不需要去等待它完成,
: 一开始我只想到 4. 那个做法,
: 但是又想能不能全部都利用 php 来完成 :P
可以. php 预设会产生执行档 (提供作为 script / CGI 之用)
windows 预设应该会是 %PHP%\PHP.exe .
若是要执行档案, 可以当作 argv 传进去, 例如
%PHP%\php.exe c:\www\some-dir\tmp.php
: 环境:windows, apache2, php5
: 3. 似乎不行
: It is not possible to use the function 'pcntl_fork' when PHP is used as Apache
: module. You can only use pcntl_fork in CGI mode or from command-line.
用上面的方法呼叫一只 cmd-line php,
再把那只 php fork 出另一只即可.
output ? 如我前面所写, 弄个页面去读档案, 档案内容由实际在跑的那只程式产生,
(是否透过 template engine 或类似的逻辑就随你了) 在完成後显示结果, 否则为
进度即可.
我还是不认为把需要运算数日的东西用 php 写是个好主意,
又或者, 也许是因为你用 php 写才需要跑这麽久的 XD
--
鬼压床怎麽办
骑上去啊
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.217.134
1F:→ clifflu:同样, 你可能会需要用到 flock 等函式 请自己念 manual 吧 10/25 20:30