导航:首页 > 编程语言 > php有多线程吗

php有多线程吗

发布时间:2024-07-04 08:10:06

A. php真的有多进程,多线程吗

通常意义上所说的多进程是由apache调度的,比如html页面同时发送5个ajax请求的时候,那么5个php进程会几乎同时进行。
PHP本身是不存在多线程的,总是单线程的方式执行。

误区就是PHP可以通过特别的手段用多进程的方式来模拟多线程,不过几乎用不到。因为PHP不像java之类的本身有进程管理机制,因此模拟的多线程非常不好控制,同时效率也并不高。

B. 有什么办法可以实现php控制多线程运行

php(做为现在的主流开发语言)中实现多线程? 看到这个标题, 你一定以为我疯了..但是事实上我真的这么做了.
下面是我的一些做法, 已经实验过. 确实可以的.
我们知道php(做为现在的主流开发语言)本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的.
也就是说可以同时让多人一起访问. 这也是我在php(做为现在的主流开发语言)中实现多线程的基础.
假设我们现在运行的是a.php(做为现在的主流开发语言)这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php(做为现在的主流开发语言)
那么这两个文件将是同时执行的.
(PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出)
有些时候, 我们想运行的不是另一个文件, 而是本文件中的一部分代码.该怎么办呢?
其实可是通过参数来控制a.php(做为现在的主流开发语言)来运行哪一段程序.
下面看一个例子:
//a.php(做为现在的主流开发语言)

php(做为现在的主流开发语言)代码:--------------------------------------------------------------------------------
<?php(做为现在的主流开发语言)
function runThread()
{
$fp = fsockopen(localhost, 80, $errno, $errmsg);

fputs($fp, "GET /a.php(做为现在的主流开发语言)?act=b "); //这里的第二个参数是HTTP协议中规定的请求头
//不明白的请看RFC中的定义

fclose($fp);
}
function a()
{
$fp = fopen(result_a.log, w);
fputs($fp, Set in . Date(h:i:s, time()) . (double)microtime() . " ");

fclose($fp);
}
function b()
{
$fp = fopen(result_b.log, w);
fputs($fp, Set in . Date(h:i:s, time()) . (double)microtime() . " ");

C. php怎样多线程操作

其实就PHP而言,可以用2种方式来做:
(1)在PHP里使用shell_exec的函数,以shell的方式,启动一个独立的PHP脚本执行。这种方式,其实相当于在Web服务器处理过程中,独立起了一个shell进程处理你的任务。这里,需要特别注意的是shell_exec的服务器安全,注意校验参数,小心避免被带入shell命令中。这个是比较容易实现的方式。
(2)使用PHP实现一个Server,监听一个端口,为Web端提供服务。这里的实现方式有很多,通常要配合扩展,例如原生的pthread(多线程),开源扩展swoole等等。

D. php支持多线程吗请详细解说

PHP本身是多线程的脚本解释器,但是脚本不是多线程,在Linux下可以通过子进程模拟多线程。

E. php多线程

以下都是转载, 简单说下, php是不支持多线程的。。。。

PHP语言本身是不支持多线程的. 总结了一下网上关于PHP模拟多线程的方法, 总的来说, 都是利用了PHP的好伙伴们本身所具有的多线程能力. PHP的好伙伴指的就是LINUX和APACHE啦, LAMP嘛.

另外, 既然是模拟的, 就不是真正的多线程. 其实只是多进程. 进程和线程是两个不同的概念. 好了, 以下方法都是从网上找来的.

1. 利用LINUX操作系统

<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>

上面存成test.php, 然后写一段SHELL代码

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done

2. 利用fork子进程(其实同样是利用LINUX操作系统)

<?php
declare(ticks=1);
$bWaitFlag = FALSE; /// 是否等待进程结束
$intNum = 10; /// 进程总数
$pids = array(); /// 进程PID数组
echo ("Startn");
for($i = 0; $i < $intNum; $i++) {
$pids[$i] = pcntl_fork();/// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息
if(!$pids[$i]) {
// 子进程进程代码段_Start
$str="";
sleep(5+$i);
for ($j=0;$j<$i;$j++) {$str.="*";}
echo "$i -> " . time() . " $str n";
exit();
// 子进程进程代码段_End
}
}
if ($bWaitFlag)
{
for($i = 0; $i < $intNum; $i++) {
pcntl_waitpid($pids[$i], $status, WUNTRACED);
echo "wait $i -> " . time() . "n";
}
}
echo ("Endn");
?>

3. 利用WEB SERVER, PHP不支持多线程, APACHE可是支持的, 呵呵.

假设我们现在运行的是a.php这个文档. 但是我在程式中又请求WEB服务器运行另一个b.php

那么这两个文档将是同时执行的.

<?php
function runThread()
{
$fp = fsockopen('localhost', 80, $errno, $errmsg);
fputs($fp, "GET /a.php?act=brnrn");
fclose($fp);
}
function a()
{
$fp = fopen('result_a.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
function b()
{
$fp = fopen('result_b.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
if(!isset($_GET['act'])) $_GET['act'] = 'a';
if($_GET['act'] == 'a')
{
runThread();
a();
}
else if($_GET['act'] == 'b') b();
?>

当然啦,也可以把需要多线程处理的部分交给JAVA去处理, 然后在PHP里调用, 哈哈.

<?php
system('java multiThread.java');
?>

F. PHP涓镄勶纸浼锛夊氱嚎绋嬩笌澶氲繘绋嬶纻

鍒╃敤WEB链嶅姟鍣ㄦ湰韬镄勫氱嚎绋嬫潵澶勭悊锛屼粠WEB链嶅姟鍣ㄥ氭¤皟鐢ㄦ垜浠闇瑕佸疄鐜板氱嚎绋嬬殑绋嫔簭銆



PHP涓涔熻兘澶氱嚎绋嬩简锛岄偅涔堥梾棰树篃𨱒ヤ简锛屾艰触闾e氨鏄钖屾ョ殑闂棰樸傛矙娌崇数鑴戝煿璁鐭ラ亾PHP链韬鏄涓嶆敮鎸佸氱嚎绋嬬殑锛屾墍浠ユ洿涓崭细链変粈涔埚儚Java涓璼ynchronize镄勬柟娉曚简銆傞偅鎴戜滑璇ュ备綍锅氩憿锛



1.灏介噺涓嶈块梾钖屼竴涓璧勬簮銆备互阆垮厤鍐茬獊銆备絾鏄鍙浠ュ悓镞跺儚鏁版嵁搴撴搷浣溿傚洜涓烘暟鎹搴撴槸鏀鎸佸苟鍙戞搷浣灭殑銆傛墍浠ュ湪澶氱嚎绋嬬殑PHP涓涓嶈佸悜钖屼竴涓鏂囦欢涓鍐椤叆鏁版嵁銆傚傛灉蹇呴’瑕佸啓镄勮瘽锛岀敤鍒镄勬柟娉曡繘琛屽悓姝ャ傚傝皟鐢╢lock瀵规枃浠惰繘琛屽姞阌佺瓑銆傛垨寤虹珛涓存椂鏂囦欢锛屽苟鍦ㄥ彟澶栫殑绾跨▼涓绛夊緟杩欎釜鏂囦欢镄勬秷澶眞hile(file_exits('xxx'));杩欐牱灏辩瓑浜庤繖涓涓存椂鏂囦欢瀛桦湪镞讹纴琛ㄧず鍏跺疄绾跨▼姝e湪镎崭綔銆傚傛灉娌℃湁浜呜繖涓鏂囦欢锛岃存槑鍏跺畠绾跨▼宸茬粡閲婃斁浜呜繖涓銆


2.灏介噺涓嶈佷粠runThread鍦ㄦ墽琛宖puts钖庡彇杩欎釜socket涓璇诲彇鏁版嵁涔辨敼锣勚傚洜涓鸿佸疄鐜板氱嚎鍝楀疗绋嬶纴闇瑕佺殑鐢ㄩ潪阒诲炴ā寮忋傚嵆鍦ㄥ儚fgets杩欐牱镄勫嚱鏁版椂绔嫔嵆杩斿洖銆伞傛墍浠ヨ诲啓鏁版嵁灏变细鍑洪梾棰樸傚傛灉浣跨敤阒诲炴ā寮忕殑璇濓纴绋嫔簭灏变笉绠楁槸澶氱嚎绋嬩简銆备粬瑕佺瓑涓婇溃镄勮繑锲炴墠镓ц屼笅闱㈢殑绋嫔簭銆傛墍浠ュ傛灉闇瑕佷氦鎹㈡暟鎹链钖庡埄鐢ㄥ栭溃鏂囦欢鎴栨暟鎹涓瀹屾垚銆傚疄鍦ㄦ兂瑕佺殑璇濆氨鐢╯ocket_set_nonblock($fp)𨱒ュ疄鐜般


璇翠简杩欎箞澶氾纴鍊掑簳杩欎釜链夋病链夊疄闄呯殑镒忎箟锻锛熷湪浠涔堟椂鍊欓渶瑕佽繖绉岖敤杩欑嶆柟娉曞憿锛


绛旀堟槸镶瀹氱殑銆傚ぇ瀹剁煡阆撱傚湪涓涓涓嶆柇璇诲彇缃戠粶璧勬簮镄勫簲鐢ㄤ腑锛岀绣缁灭殑阃熷害鏄鐡堕堛傚傛灉閲囧氲繖绉嶅舰寮忓氨鍙浠ュ悓镞朵互澶氢釜绾跨▼瀵逛笉钖岀殑椤甸溃杩涜岃诲彇銆



G. PHP 到底是单进程还是多进程

默认是单进程,可以支持多进程

阅读全文

与php有多线程吗相关的资料

热点内容
程序员去培训机构还是专科好 浏览:789
pythonvpn服务器 浏览:178
崩坏三如何安卓玩ios服 浏览:125
php消息发布 浏览:45
单片机jnz 浏览:148
ctex写着写着出现编译错误 浏览:497
方舟编译器多国语言 浏览:38
python主流编译器 浏览:388
怀尔德pdf 浏览:386
程序员p1到p1的划分 浏览:510
android算法数据结构 浏览:368
什么公司需要程序员 浏览:998
压缩机工作不正常 浏览:302
腾讯云服务器32核32g 浏览:633
自制压缩机电冰箱 浏览:395
炸mc服务器的人地址 浏览:388
鼠标滑轮怎么点开文件夹 浏览:152
安卓如何连接电脑 浏览:458
规划饮食有什么app 浏览:122
活塞压缩机优缺点 浏览:619