很多站长朋友们都不太清楚linuxphp多线程,今天小编就来给大家整理linuxphp多线程,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 linux下多进程或者多线程编程的问题。新手,望指教! 2、 linux操作系统多进程和多线程的区别 3、 php多线程 4、 探讨nginx与php-fpm是不是以多进程多线程方式运行的 5、 怎么在linux运行php文件? linux下多进程或者多线程编程的问题。新手,望指教!第一个问题,不管是创建进程或者创建线程都不会阻塞,创建完毕马上返回不会等待子进程或者子线程的运行
第二个问题
首先进程和线程是不一样的
多进程时,父进程如果先结束,那么子进程会被init进程接收成为init进程的子进程,接下来子进程接着运行,直到结束,init进程负责取得这些子进程的结束状态并释放进程资源。而如果是子进程先结束,那么父进程应当用wait或者waitpid去获取子进程的结束状态并释放进程资源,否则子进程会成为僵死进程,它占用的进程资源不会释放
多线程时,如果父线程或者说你讲的main结束时使用return或者exit或者处理完毕结束,那么整个进程都结束,其他子线程自然结束。如果main结束时使用的是pthread_exit那么只有父线程结束,子线程还在运行。同样对于子线程结束时如果调用了exit,那么整个进程包括父线程结束,如果调用了pthread_exit或者正常结束,那么只有子线程结束。
另外子线程结束时如果没有分离属性,其他线程应当使用pthread_join去获取线程结束状态并释放线程资源,如同进程里的wait和waitpid
linux操作系统多进程和多线程的区别进程:运行中的程序,-->执行过程称之为进程。
线程:线程是轻量级的进程,是进程中的一条执行序列,一个进程至少有一条线程。
多线程优点:①无需跨进程边界;②程序逻辑和控制方式简单;③所有线程可以直接共享内存和变量;④线程方式消耗的总资源比进程少。
多进程优点:①每个进程相互独立,不影响主程序的稳定性,子进程崩溃没关系;②通过增加CPU就可以容易扩充性能;③可以尽量减少线程加锁/解锁的影响,极大提高性能。
多线程缺点:①每条线程与主程序共用地址空间,大小受限;②线程之间的同步和加锁比较麻烦;③一个线程的崩溃可能影响到整个程序的稳定性;④到达一定的线程数之后,即使在增加CPU也无法提高性能。
多进程缺点:①逻辑控制复杂,需要和主程序交互;②需要跨进程边界,如果有大数据传输,不适合;③多进程调度开销比较大。
Linux系统中多进程和多线程的区别是什么?
1、多进程中数据共享复杂、同步简单;而多线程中数据共享简单、同步复杂。
2、多进程占用内存多、切换复杂、速度慢、CPU利用率低;而多线程占用内存少、切换简单、CPU利用率高。
3、多进程的编程简单、调试简单;而多线程的编程复杂、调试复杂。
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');
?>
探讨nginx与php-fpm是不是以多进程多线程方式运行的这个问题比较初级,官方文档上的资料都是很全的。
Nginx 是非阻塞IO IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求。
Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。
PHP-FPM 是阻塞的单线程模型,pm.max_children 指定的是最大的进程数量,pm.max_requests 指定的是每个进程处理多少个请求后重启(因为 PHP 偶尔会有内存泄漏,所以需要重启).
PHP-FPM 的每个进程也只有一个线程,但是一个进程同时只能服务一个客户端。
大多数的 Linux 程序都倾向于使用进程而不是线程,因为 Linux 下相对来说创建进程的开销比较小,而 Linux 的线程功能又不是很强大。
你可以去后盾人平台看看,里面的东西不错
怎么在linux运行php文件?1、打开我们的linux命令行,准备好。
2、找到php的安装目录,主要是找到linux环境下,php可执行文件的目录。如图所示。笔者的目录为/opt/lampp/bin/php,将此目录记下,备用。
3、找到要运行的php文件所在的目录,随便写点php代码就可以,在此笔者已经准备好。/opt/lampp/htdocs/wechat/xjtest-web_browser/pcntl_test.php,将此目录记下,接下来就要正式开始运行了。
4、打开刚刚第一步打开的linux命令行,输入/opt/lampp/bin/php /opt/lampp/htdocs/wechat/xjtest-web_browser/pcntl_test.php(即依次输入刚刚的两个目录)注意两个目录中间有空格。
5、按下回车,可以看到,php文件已经正确执行了。
常见问题解答
1. 在windows下的软件可不可以正常的运行?
不可以,不过有一个软件叫 wine ,可以模拟运行一部分程序。他的衍生版本可以运行特定方面的软件。比如 cedega ,可以运行很多游戏,CS、WarCraft3 、wow 都能,但还是不够完美。比如 wow 里部分插件导致运行缓慢(我很郁闷的遇到了,只好进 win 玩魔兽,CS 用 OpenGL 基本完美。当然前提是你的显卡正确安装了驱动,打开了 3D 支持)。
2. 哪个杀毒软件支持linux?
Avast!,Mcafee,Kaspersky和ClamAV(自由软件,开源、免费)等。
暂时 linux 还不需要杀毒软件,病毒很少,主要是黑客攻击,注意设置就行了。 比如选择针对桌面设计的版本,来减少过多服务程序导致安全隐患。
3. 在Linux是不是可以听歌的啊?
可以。绝对可以,而且Linux下的软件很早就入侵Windows了。
ffmpeg 解码器库就是linux下的,Mplayer 也是linux 里的。(注意不是windows 里的那个韩国的KMPlayer ,Linux 里的KMPlayer是一个Mplayer的KDE界面程序)
4. QQ可不可以在Linux运行啊?
腾讯官方已发布QQ for Linux beta1(于2009年1月4日发布),但功能尚且比较简单,可以支持屏幕截图,语音聊天。目前不支持群管理,群空间等高级属性。已经可以支持红旗 linux桌面版6.0,对最新的suse linux 11.1的支持也非常好。其他的可以选择的开源解决方案还有eva,lumaQQ和pidgin。目前eva的功能较强大。(参见: )
5. linux下最强大的程序调试器是?
Totalview debugger是迄今为止最强大的可以运行在linux下的调试工具,它的图形化调试界面,强大的多线程、内存调试能力令众多同类调试工具都黯然失色!Totalview debugger可以让您彻底抛弃手敲命令的烦恼,让您的开发过程变得轻松便捷!
关于linuxphp多线程的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于linuxphp多线程 linux多线程命令的详细内容...