进程和线程一定认识

35 篇文章 2 订阅

进程和线程
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程, 是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。

线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处 理器调度和分派的基本单位。一个进程可以有一个或多个线程。

进程上面是cpu
执行index.php文件时就是一个进程

ps -efl grep php-fpm   //使用命令查看进程

进程可以开启cpu 核数的 1到4倍
在这里插入图片描述
进程和线程区别

  1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;

2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线 3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代 码段,数据集,堆等)及一些进程级的资源(如打开文件和信

号等),某进程内的线程在其他进程不可见; 4. 调度和切换:线程上下文切换比进程上下文切换要快得多

5 线程天生的共享内存空间,线程间的通信更简单,避免了进程IPC引入新的复 杂度。

进程开销大 线程开销小

php实现多进程
在这里插入图片描述
如果子进程内存中的数据改变,父进程内存的数据不变(涉及进程的通讯)

fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行, 不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是 0。

在这里插入图片描述
在这里插入图片描述
在各个进程中,内存空间都是不一致的,各个变量都是在不同的内存空间
进程间空间独立 数据不能共享 php的变量存在于内存中

进程间的通信
管道通信

消息队列通信

进程信号通信

共享内存通信,映射一段能被其他进程所访问的内存,这段共享内存由一个进程包 建,但多个进程都可以访问。共享内存是最快的 IPC(进程间通信)方式,它 针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如 信号两,配合使用,来实现进程间的同步和通信。

套接字通信

第三方通信,使用文件操作,mysql,redis等方法也可实现通信

僵尸进程
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程 占用的资源,此时子进程将成为一个僵尸进程。

top  查看      zombie僵尸进程验证影响性能

Linux中支持非常多种信号,它们都以SIG字符串开头,SIG字符串后的才是真正 的信号名称,信号还有对应的数值,其实数值才是操作系统真正认识的信号。

我们cpu 处理进程认的是信号

SIGHUP SIGSTOP SIGCONT … 信号

多线程
PHP 默认并不支持多线程,要使用多线程需要安装 pthread扩展,而要安装 pthread 扩展,必须使用 -enable-maintainer-zts 参数重新编译 PHP,这个参 数是指定编译 PHP 时使用线程安全方式。

下载pthreads

wget http://peclphp.netget/pthreads.tgz

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

extension =pthreads.so

线程安全
多线程是让程序变得不安分的一个因素,在使用多线程之前,首先要考虑线程安 全问题:

线程安全:线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调 用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。

PHP 实现的线程安全主要是使用 TSRM 机制对 全局变量和静态变量进行了隔离 将全局变量和静态变量 给每个线程都复制了一份,各线程使用的都是主线程的 一个备份,从而避免了变量冲突,也就不会出现线程安全问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值