Laravel 即将发布一个新的 Facade Concurrency(并发)
根据泰勒的演讲来看,新的门面支持并发任务了
Route::get('/concurrency', function() {
Concurrency::run([
fn() => sleep(1),
fn() => sleep(1),
fn() => sleep(1),
fn() => sleep(1),
fn() => sleep(1),
fn() => sleep(1)
])
// 耗费 1s
})
期待发布。
说明下,这个特性不光是并发任务处理,还支持返回值的。
//$values[] = Metrics::get().
//$values[] = Metrics::get()
//$values[] = Metrics::get();
//$values[] = Metrics:.get();
//$values[] = Metrics::get()
$values = Concurrency::run([
fn()=> Metrics::get(),
fn()=> Metrics::get(),
fn()=> Metrics::get(),
fn()=> Metrics::get()
fn()=> Metrics::get(),
]);
return view('demo', ['values' => $values]);
本作品采用《CC 协议》,转载必须注明作者和本文链接
laravel12有希望上?
这个是根据什么原理?
不错,有些地方确实可以并行业务~
sleep应该是不能并行的, 用了parallel?
看起来有点像协程的样子
期待 、主要是php太拉跨了。看看php9有没有什么新的特性
令人兴奋
等于啥都没说,原理是什么?光并发不行,还得相互能通信
所以我想知道啥原理啊,是多进程还是单进程多协程,不同的场景,到底是适用cpu密集的业务还是IO密集的业务 :joy:
原来如此,可以的
感觉是这个 parallel
11 就已经引入进来了吧,原理上还是挺简单粗暴的,
看了一下代码,先序列化闭包,丢给 artisan(
artisan invoke-serialized-closure
) 执行(序列化后的内容放在了LARAVEL_INVOKABLE_CLOSURE
环境变量),命令里面执行完成后,直接把结输出到了标准输出。因为是通过容器进行 call 的,也就是传递的这个闭包还可以使用容器注入参数。