Đa luồng có thể có trong php
Có, bạn có thể thực hiện đa luồng trong PHP với pthreads
Từ tài liệu PHP :
pthreads là một API hướng đối tượng, cung cấp tất cả các công cụ cần thiết cho đa luồng trong PHP. Các ứng dụng PHP có thể tạo, đọc, viết, thực thi và đồng bộ hóa với các đối tượng Chủ đề, Công nhân và Chủ đề.
Cảnh báo : Không thể sử dụng tiện ích mở rộng pthreads trong môi trường máy chủ web. Do đó, luồng trong PHP chỉ nên duy trì cho các ứng dụng dựa trên CLI.
Kiểm tra đơn giản
#!/usr/bin/php
Chạy đầu tiên
12:00:06pm: A -start -sleeps 5
12:00:06pm: B -start -sleeps 3
12:00:06pm: C -start -sleeps 10
12:00:06pm: D -start -sleeps 2
12:00:08pm: D -finish
12:00:09pm: B -finish
12:00:11pm: A -finish
12:00:16pm: C -finish
Lần chạy thứ hai
12:01:36pm: A -start -sleeps 6
12:01:36pm: B -start -sleeps 1
12:01:36pm: C -start -sleeps 2
12:01:36pm: D -start -sleeps 1
12:01:37pm: B -finish
12:01:37pm: D -finish
12:01:38pm: C -finish
12:01:42pm: A -finish
Ví dụ thế giới thực
error_reporting[E_ALL];
class AsyncWebRequest extends Thread {
public $url;
public $data;
public function __construct[$url] {
$this->url = $url;
}
public function run[] {
if [[$url = $this->url]] {
/*
* If a large amount of data is being requested, you might want to
* fsockopen and read using usleep in between reads
*/
$this->data = file_get_contents[$url];
} else
printf["Thread #%lu was not provided a URL\n", $this->getThreadId[]];
}
}
$t = microtime[true];
$g = new AsyncWebRequest[sprintf["//www.google.com/?q=%s", rand[] * 10]];
/* starting synchronization */
if [$g->start[]] {
printf["Request took %f seconds to start ", microtime[true] - $t];
while [ $g->isRunning[] ] {
echo ".";
usleep[100];
}
if [$g->join[]] {
printf[" and %f seconds to finish receiving %d bytes\n", microtime[true] - $t, strlen[$g->data]];
} else
printf[" and %f seconds to finish, request failed\n", microtime[true] - $t];
}
384 hữu ích 5 bình luận chia sẻ