search
Why use swoole in php?Apr 23, 2019 am 11:08 AM
phpswoole

I have been studying Swoole in the past two months, so with the help of this article, I hope to bring Swoole to more people. Although Swoole may currently be positioned as a toy for some advanced phpers, which is intimidating to intermediate and low-level users, and may also be confused by some application scenarios, it is actually not that difficult.

The self-introduction on Swoole's official website is "PHP asynchronous network communication engine for production environments". First of all, Swoole is a network application development tool that supports Http, TCP, UDP, and WebSocket.

There are differences between Swoole and our traditional PHP development, and there are also concepts that need to be understood. If you use some current Swoole-based frameworks to develop, the development habits are similar to the traditional TP and LV frameworks.

So why use Swoole?

I think there are the following points:

Resident in memory, avoid performance losses caused by repeated loading, improve massive performance

Coroutine asynchronous, improve Concurrent processing capabilities for I/O-intensive scenarios (such as WeChat development, payment, login, etc.)

Conveniently develop Http, WebSocket, TCP, UDP and other applications, and can communicate with hardware

PHP High-performance microservice architecture has become a reality

Resident memory

Currently, the traditional PHP framework has to load the framework file and configure it before processing each request. operate. This may have become a big cause of performance issues, but with Swoole there is no such problem, once loaded and used many times.

Coroutine

As shown in the figure below, this is a scenario where the same thread handles concurrent requests. For example, one of your interfaces needs to call other api interfaces or read and write For large files, the advantages of traditional synchronous blocking and coroutine asynchronous are reflected.

Why use swoole in php?

Detailed explanation of why Swoole coroutines are suitable for I/O-intensive scenarios

When it comes to coroutines, we must first briefly talk about processes and threads. As we all know, processes It takes up a lot of resources, and creating a large number of processes in order to handle requests is definitely not worth the gain. There are many multi-threaded applications. At the CPU level, several cores will perform several tasks. Once too many threads are created, there will be a loss in thread scheduling.

Coroutines are implemented on a single-thread basis, which can maximize the use of CPU resources without wasting them while waiting for I/O. Of course, the more coroutines, the more memory they occupy, but this is acceptable. Compared with processes and threads, the resources occupied are relatively small.

When using coroutines, when encountering scenarios such as reading and writing files, requesting interfaces, etc., the coroutines will be automatically suspended and the CPU will be given to other coroutines to perform tasks. This can improve single-threaded CPU resource utilization. Reduce waste, thereby improving performance.

Coroutine code example:

<?php
use Swoole\Coroutine as co;
 
// 协程
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
    // 创建协程
    go(function() use($i){
        co::sleep(1.0); // 模拟请求接口、读写文件等I/O
        echo $i, PHP_EOL;
    });
}
swoole_event_wait();
echo &#39;co time:&#39;, microtime(true) - $time, &#39; s&#39;, PHP_EOL;
 
// 同步
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
    sleep(1); // 模拟请求接口、读写文件等I/O
    echo $i, PHP_EOL;
}
echo &#39;sync time:&#39;, microtime(true) - $time, &#39; s&#39;, PHP_EOL;

Running results:

0
9
8
7
6
5
4
3
2
1
co time:1.0087130069733 s
0
1
2
3
4
5
6
7
8
9
sync time:10.010055065155 s

As can be seen from the above results, coroutine execution is not sequential, and the performance is higher. In sleep The task execution rights of the current thread will be handed over to other coroutines.

Create Http service

In fact, it is not as difficult as imagined. Look at the code:

$http = new swoole_http_server("127.0.0.1", 9501);
$http->on(&#39;request&#39;, function ($request, $response) {
    $response->end("<h1 id="Hello-nbsp-Swoole-nbsp-rand-nbsp">Hello Swoole. #".rand(1000, 9999)."</h1>");
});
$http->start();

Microservice

Tars is the unified application framework TAF (Total Application Framework) of the backend logic layer that Tencent has been using from 2008 to today. It currently supports C, Java, PHP, and Nodejs languages. This framework provides users with a complete set of solutions involving development, operation and maintenance, and testing, helping a product or service to quickly develop, deploy, test, and go online. It integrates scalable protocol encoding and decoding, high-performance RPC communication framework, name routing and discovery, release monitoring, log statistics, configuration management, etc. Through it, you can quickly build your own stable and reliable distributed applications using microservices, and Achieve complete and effective service governance.

If there are any mistakes, please point them out. I really want to recommend Swoole to everyone!

The above is the detailed content of Why use swoole in php?. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:yurunsoft. If there is any infringement, please contact admin@php.cn delete
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)