Skip to content

Commit 8755fd3

Browse files
authored
Update QA.md
添加以下问题的答案 1.BOM 头是什么,怎么除去 2.swoole的进程模型 3.swoole适用场景,协程实现方式
1 parent 372badf commit 8755fd3

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

docs/03.PHP/QA.md

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 fin
147147

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

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

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

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

531-
那你知道swoole的进程模型
531+
Swoole 是一个使用 C++ 语言编写的基于异步事件驱动和协程的并行网络通信引擎,为 PHP 提供协程、高性能网络编程支持。提供了多种通信协议的网络服务器和客户端模块,可以方便快速的实现 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等,使 PHP 不再局限于传统的 Web 领域。
532+
533+
534+
协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建销毁和切换的成本非常低,和线程不同的是协程没法利用多核 cpu 的,想利用多核 cpu 需要依赖 Swoole 的多进程模型。
535+
在底层实现上是单线程的,因此同一时间只有一个协程在工作,协程的执行是串行的。
536+
采用 CSP 编程模型,即不要以共享内存的方式来通信,相反,要通过通信来共享内存。
537+
swoole4.0采用双栈方式,通过栈桢切换来实现协程;即遇到IO等待就切换到。
538+
539+
#### swoole的进程模型
540+
541+
同一台主机上两个进程间通信 (简称 IPC) 的方式有很多种,在 Swoole 中使用了 2 种方式 Unix Socket 和 sysvmsg。
542+
543+
swoole启动后会生成master进程、reactor线程、worker进程、task进程以及manager进程
544+
545+
master进程是一个多线程进程,会生成多个reactor线程
546+
reactor线程负载网络监听、数据收发
547+
work进程处理reactor线程投递的请求数据
548+
task进程处理work进程投递的任务
549+
manager进程用于管理work进程和task进程
532550

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

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

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

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

0 commit comments

Comments
 (0)