旗下导航:搜·么
当前位置:网站首页 > PHP框架 > Swoole > 正文

swoole支撑多线程吗?【swoole】,swoole

作者:搜搜PHP网发布时间:2019-12-26分类:Swoole浏览:80


导读:Reactor线程Swoole\Server的主历程是一个多线程的顺序。其中有一组很主要的线程,称之为Reactor线程。它就是真正处置惩罚TCP衔接,收发数据的线程。...

Reactor线程

Swoole\Server的主历程是一个多线程的顺序。其中有一组很主要的线程,称之为Reactor线程。它就是真正处置惩罚TCP衔接,收发数据的线程。

Swoole的主线程在Accept新的衔接后,会将这个衔接分派给一个牢固的Reactor线程,并由这个线程担任监听此socket。在socket可读时读取数据,并举行协定剖析,将要求投递到Worker历程。在socket可写时将数据发送给TCP客户端。

分派的盘算体式格局是fd % serv->reactor_num

因为PHP言语不支撑多线程,因而Swoole运用多历程形式。在多历程形式下存在历程内存断绝,在事情历程内修正global全局变量和超全局变量时,在其他历程是无效的。

设置worker_num=1时,不存在历程断绝,能够运用全局变量保留数据

历程断绝

$fds = array();
$server->on('connect', function ($server, $fd){
    echo "connection open: {$fd}\n";
    global $fds;
    $fds[] = $fd;
    var_dump($fds);
});

$fds 虽然是全局变量,但只在当前的历程内有效。Swoole效劳器底层会建立多个Worker历程,在var_dump($fds)打印出来的值,只要部份衔接的fd。

对应的解决方案就是运用外部存储效劳:

数据库,如:MySQL、MongoDB
缓存效劳器,如:Redis、Memcache
磁盘文件,多历程并发读写时须要加锁

一般的数据库和磁盘文件操纵,存在较多IO等待时间。因而引荐运用:

Redis 内存数据库,读写速率非常快
/dev/shm 内存文件体系,读写操纵悉数在内存中完成,无IO斲丧,机能极高
除了运用存储以外,还能够运用同享内存来保留数据

引荐进修: swoole视频教程

以上就是swoole支撑多线程吗?的细致内容,更多请关注ki4网别的相干文章!

标签:swoole