php多线程并发是怎么完成的
发布时间:2022-02-24 09:09:44 所属栏目:PHP教程 来源:互联网
导读:java里多线程就是一个new thread的事情,php依赖apache靠着linux底层有一个多线程的办法。 今天说说如果你无法操控apache的服务器,如何模拟php并发: ?php if(function_exists(date_default_timezone_set)) { date_default_timezone_set(PRC); } function a(
java里多线程就是一个new thread的事情,php依赖apache靠着linux底层有一个多线程的办法。 今天说说如果你无法操控apache的服务器,如何模拟php并发: <?php if(function_exists('date_default_timezone_set')) { date_default_timezone_set('PRC'); } function a() { $time = time(); sleep(3); $fp = fopen('result_a'.$time.'.log', 'w'); fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn"); fclose($fp); } function b() { $time = time(); if(!isset($_GET['act'])) $_GET['act'] = 'a'; //Cuoxin.com if($_GET['act'] == 'a') { a(); } else if($_GET['act'] == 'b') b(); ?> 以上代码,在本地写入一个文件。 如果你访问 localhost/a.php 在两个浏览器标签尽可能快的同时打开,发现两个文件创建时间相差为3秒. 但是如果你访问localhost/a.php?act=b 另一个访问/a.php?act=a 你发现两个文件创建的时间几乎差不多。 对于apache来说同样的url意味着一个线程(我们或者说是进程),但是不同的URL意味着可以并发。 如果php内部有下载的动作: function runThread() { down("http://localhost/test/a.php?act=a"); } if($_GET['act'] == 'run') { echo 'start:'; runThread(); 上面存成test.php, 然后写一段SHELL代码: #!/bin/bash for i in 1 2 3 4 5 6 7 8 9 10 do php -q test.php & done (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |