• php、apache、nginx、线程、进程


    最近在学swoole,发现里面设计好多操作系统里面的概念,这些基础知识正是自己欠缺的。根基不牢的高楼大厦,犹如空中楼阁,随时都要崩塌,早发现早治疗哈哈^_^。


    一、概念

    1) 进程:是指正在运行的一个程序,不仅仅包含这个程序的代码( code ),数据( data ),文件,还包括当前的运行状态,

    即指令( Program Counter ),栈,和当前 CPU 寄存器的值(有时还包括堆)。新创建一个进程需要在内存中创建以上所有内容。

    对于 Web Server 来说,服务不同连接的代码、数据、文件都是相同的,只是运行状态不同。所以对每个连接都重新创建进程会造成资源浪费。

    2) 线程:基本上就是对进程的代码、数据、文件进行重用,每个线程只是保存了不同的运行状态。于是节省了资源。

    3)开销:另一方面,单个 CPU 同一时间只能执行一条指令,即只能运行一个进程。为了让系统能「看起来」在同时进行多个进程, CPU 需要不断地在进程之间切换。

    这就是 Multiprogramming 的概念。而进行进程切换的时候不但需要把 CPU 的当前指令指针( Program Counter )切换到下一个进程,并且需要保存当前进程的运行状态,

    载入下一个进程上次被中断时的运行状态。这部分时间其实 CPU 是没有做什么对程序来说有意义的事情的,称为进程切换的开销( Overhead )。

    线程之间的切换代价要小于进程之间的切换代价,因此使用线程节省了时间。

    二、各概念之间的联系

    1、线程与进程的关系:

    1) 一个进程可以有很多线程。多进程可以很好的利用 CPU 。

    2) 多个线程是运行在单一进程的上下文中的,其实对于单一进程中的每一个线程,都有它自己的上下文,但是由于共同存在于同一进程,所以它们也共享这个进程,包括它的代码、数据等等。

    2、 Apache、nginx在处理php请求上的区别:

    1) Apache+php_module 是父进程+子进程的模式,每个访问请求会生成子进程,就不会有阻塞了。

    2) Nginx+PHP-FPM 的话感觉 Nginx 和 PHP 相互独立了, Nginx 遇到自己处理不了的请求就会给 PHP-FPM ( PHP FastCGI进程管理器)处理,

    每来一个请求就会交给一个子进程去处理(这里根据 PHP 的运行配置不同效果也不同,子进程的数量可以是固定的也可以动态生成),然后 Nginx 对交给 PHP-FPM 的请求进行轮训( epoll 机制)。

    这样处理性能和资源占用都比 Apache 有优势。

     

     

     

  • 相关阅读:
    关于STM32的bxcan模块中的Error management中的TEC和REC的值
    不同MCU的大小端(endian)分类
    vmware中虚拟机的网络连接设置
    ST的STM32系列单片机
    使用diskgenius进行分区的备份和恢复
    VMware虚拟机设置中的网络适配器设置
    js图片随鼠标移动,旋转,拉伸
    JDK1.8的Lambda、Stream和日期的使用详解
    MySQL Explain详解
    为什么我使用了索引,查询还是慢?
  • 原文地址:https://www.cnblogs.com/hld123/p/9438557.html
Copyright © 2020-2023  润新知