岛屿可以找到海
岛屿可以找到海

php和golang协程浅浅对比一下

这是PHP使用workerman框架+event-loop实现的协程

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Coroutine;
use Workerman\Events\Fiber;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';

$worker2 = new Worker('http://0.0.0.0:8001');
$worker2->eventLoop = Fiber::class; // 使用自带的Fiber协程
$worker2->onWorkerStart = function (Worker $worker) {
    Coroutine::create(function () {
        Timer::sleep(5);
        echo file_get_contents("https://www.baidu.com/");
    });
    echo "协程返回...";


};

Worker::runAll();

这是golang原生协程

package main

import (
	"fmt"
	"io"
	"net/http"
	"sync"
	"time"
)

func main() {
	waitGroup := sync.WaitGroup{}
	go func() {
		waitGroup.Add(1)
		time.Sleep(5 * time.Second)
		response, _ := http.Get("https://www.baidu.com/")
		defer response.Body.Close()
		body, _ := io.ReadAll(response.Body)
		fmt.Println(string(body))
		waitGroup.Done()
	}()
	fmt.Println("协程返回...")
	waitGroup.Wait()
}

已经很久没用PHP了,不过不得不说PHP能发展到今天这一步还是很不错的,现在PHP协程、异步解决方案也是日渐完善了起来,想当年PHP协程的唯一方案还是swoole,但是苦与和php-fpm的生态有断层,所以使用的时候还是会酌情选择的,但是终究感觉PHP这一切貌似来的太晚了哈哈哈,可能一切都是天注定吧。

岛屿可以找到海

php和golang协程浅浅对比一下
这是PHP使用workerman框架+event-loop实现的协程 <?php use Workerman\Worker; use Workerman\Connection\TcpConnection; use Workerman\Protocols\Http\Request; use Workerman\Co…
扫描二维码继续阅读
2025-08-30