hyper必备知识点

在使用 hyperf 之前需要了解的几个知识点


进程,线程,协程区别

  • 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。上下文进程间的切换开销比较大
  • 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
  • 协程是一种用户态的轻量级线程,协程的调度完全由用户控制。所以上下文的切换非常快。
    线程进程都是同步机制,而协程则是异步

协程与线程主要区别是它将不再被内核调度,协程是用户程序控制,线程是将自己交给内核调度

swoole 生命周期

当一个请求到来,会由某个Reactor线程发生了连接,然后告诉Master进程,Master进程告诉Manager进程,由Manage进程负责分配给Worker进程和Task进程,最后将返回结果告诉Reactor进程发送给客户端

swoole中的角色有以下四种

Reactor线程:

  • 负责维护客户端连接,处理网络IO、处理协议、收发数据。
  • 完全是异步非阻塞的模式
  • 以多线程的方式运行

Master进程:

  • 分配请求到 Reactor线程
  • 通知 Manager进程分配任务

Manager进程:

  • fork 出Work和Task进程,回收子进程

Worker进程:

  • 负责业务处理逻辑,可以异步也可以同步模式
  • 多进程的方式运行
  • 与Reactor交互,接受数据并处理返回给Reactor

Task进程:

  • 执行异步业务
  • 同步阻塞模式
  • 以多进程的方式运行

hyperf 容器内的类都是单例

避免协程间数据混淆

在传统的 PHP-FPM 的框架里,会习惯提供一个 AbstractController 或其它命名的 Controller 抽象父类,然后定义的 Controller 需要继承它用于获取一些请求数据或进行一些返回操作,但是因为Hyperf 内绝大部分的对象包括 Controller 都是以 单例(Singleton) 形式存在的,所以在编写代码时请务必注意 不要 将单个请求相关的数据储存在类属性内,包括非静态属性。,我们可以注意到我们获取 请求(Request) 与 响应(Response) 对象时是通过注入 Hyperf\HttpServer\Contract\RequestInterface 和 Hyperf\HttpServer\Contract\ResponseInterface 来获取的,

hyperf中的进程,线程,协程

我们可以在Shell里运行,使用pstree查看进程模型结构:

reactor_num:表示Master进程中,Reactor线程总共开多少个,注意,这个可不是越多越好,因为计算机的CPU是有限的,所以一般设置为与CPU核心数量相同,或者两倍即可。

worker_num:表示启动多少个Worker进程,同样,Worker进程数量不是越多越好,仍然设置为与CPU核心数量相同,或者两倍即可。

task_worker_num :Task进程是同步阻塞的,配置方式与Worker同步模式一致

swoole中线程和协程的关系

Swoole的协程在底层实现上是单线程的,因此同一时间只有一个协程在工作,协程的执行是串行的。这与线程不同,多个线程会被操作系统调度到多个CPU并行执行。

一个协程正在运行时,其他协程会停止工作。当前协程执行阻塞IO操作时会挂起,底层调度器会进入事件循环。当有IO完成事件时,底层调度器恢复事件对应的协程的执行。

对CPU多核的利用,仍然依赖于Swoole引擎的多进程机制。

一个协程正在运行时,其他协程会停止工作 意思是一个 cpu 核心上, 只能运行一个协程么? 同一时刻, 线程一个 cpu 核心上也只能运行一个线程呀? 区别是协程会执行完自己让出 cpu, 线程是让 cpu 自动调度么?

对CPU多核的利用,仍然依赖于Swoole引擎的多进程机制 意思是请求分发到不同的 worker 进程上, worker 进程被调度到不同的 cpu 核心, 每个 cpu 核心当前都是可以执行一个协程的, 从而达到并行执行多个协程的效果?

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
虚拟化技术是一种将物理资源抽象为虚拟资源的技术,它可以将一台物理计算机划分为多个虚拟计算机,从而实现资源的隔离和共享。下面是虚拟化技术的详细知识点: 1. 虚拟化的概念:虚拟化是指通过软件或硬件技术将一个物理资源划分为多个逻辑上独立的部分,每个部分都可以被视为一个独立的实体。 2. 虚拟化的类型: - 服务器虚拟化:将一台物理服务器划分为多个虚拟服务器,每个虚拟服务器可以运行不同的操作系统和应用程序。 - 网络虚拟化:将物理网络资源划分为多个逻辑网络,实现网络资源的隔离和共享。 - 存储虚拟化:将多个物理存储设备抽象为一个逻辑存储设备,实现存储资源的统一管理和分配。 - 桌面虚拟化:将一台物理计算机划分为多个虚拟桌面,每个虚拟桌面可以运行不同的操作系统和应用程序。 3. 虚拟化的优势: - 资源利用率提高:通过虚拟化技术,可以将物理资源进行合理划分和共享,提高资源的利用率。 - 灵活性和可扩展性:虚拟化技术可以根据需求动态分配和调整资源,提供灵活性和可扩展性。 - 管理简化:通过虚拟化技术,可以将多个物理资源进行统一管理,简化了管理和维护的工作量。 - 高可用性和容错性:虚拟化技术可以实现资源的冗余和故障转移,提高系统的可用性和容错性。 4. 虚拟化的实现方式: - 软件虚拟化:通过软件层面的虚拟机监控器(VMM)实现虚拟化,如VMware、VirtualBox等。 - 硬件虚拟化:通过硬件层面的虚拟化扩展指令集(如Intel VT、AMD-V)实现虚拟化,如KVM、Hyper-V等。 5. 虚拟机技术: - 完全虚拟化:在完全虚拟化中,虚拟机可以直接运行未经修改的操作系统,但需要通过虚拟机监控器(VMM)来模拟硬件环境。 - 半虚拟化:在半虚拟化中,虚拟机需要经过修改后才能运行在虚拟化环境中,但相比完全虚拟化,半虚拟化的性能更高。 6. 容器技术:容器是一种轻量级的虚拟化技术,它通过隔离进程的方式实现资源的隔离和共享,相比传统虚拟化技术,容器具有更快的启动速度和更高的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值