Skip to content

Commit

Permalink
Merge pull request #28 from jiangwu10057/patch-2
Browse files Browse the repository at this point in the history
Update QA.md
  • Loading branch information
colinlet authored Mar 10, 2021
2 parents aa3199d + 8755fd3 commit 2a94488
Showing 1 changed file with 24 additions and 3 deletions.
27 changes: 24 additions & 3 deletions docs/03.PHP/QA.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 fin

调用类的静态函数时不会自动调用类的构造函数

### 接口类和抽象类的区别
### 接口和抽象的区别
抽象用于描述不同的事物,接口用于描述事物的行为。

### PHP 不实例化调用方法
Expand Down Expand Up @@ -528,7 +528,25 @@ $ phpize $ ./configure $ make && make install

### Swoole 适用场景,协程实现方式

那你知道swoole的进程模型
Swoole 是一个使用 C++ 语言编写的基于异步事件驱动和协程的并行网络通信引擎,为 PHP 提供协程、高性能网络编程支持。提供了多种通信协议的网络服务器和客户端模块,可以方便快速的实现 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等,使 PHP 不再局限于传统的 Web 领域。


协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建销毁和切换的成本非常低,和线程不同的是协程没法利用多核 cpu 的,想利用多核 cpu 需要依赖 Swoole 的多进程模型。
在底层实现上是单线程的,因此同一时间只有一个协程在工作,协程的执行是串行的。
采用 CSP 编程模型,即不要以共享内存的方式来通信,相反,要通过通信来共享内存。
swoole4.0采用双栈方式,通过栈桢切换来实现协程;即遇到IO等待就切换到。

#### swoole的进程模型

同一台主机上两个进程间通信 (简称 IPC) 的方式有很多种,在 Swoole 中使用了 2 种方式 Unix Socket 和 sysvmsg。

swoole启动后会生成master进程、reactor线程、worker进程、task进程以及manager进程

master进程是一个多线程进程,会生成多个reactor线程
reactor线程负载网络监听、数据收发
work进程处理reactor线程投递的请求数据
task进程处理work进程投递的任务
manager进程用于管理work进程和task进程

### PHP 数组底层实现 (HashTable + Linked list)

Expand Down Expand Up @@ -562,4 +580,7 @@ PHP 数组实现由 hashtable 变为 zend array

### BOM 头是什么,怎么除去

### 模板引擎是什么,解决什么问题、实现原理(Smarty、Twig、Blade)
WINDOWS自带的记事本,在保存一个以 UTF-8 编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM);它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。
去除方法:$result = trim($result, "\xEF\xBB\xBF");

### 模板引擎是什么,解决什么问题、实现原理(Smarty、Twig、Blade)

0 comments on commit 2a94488

Please sign in to comment.