Symfony2中的多线程

 虽虽___Hui 发布于 2023-02-08 04:14

我在这里有一些情况.我正在使用symfony2和facebook SDK为我的iPhone和Android应用程序设置Web服务.问题是后台工作可能需要很长时间.用户首先被重定向到Facebook登录页面,在那里他可以继续接受我的Facebook应用程序权限.因此,不应等待我的服务完成后台工作,应立即通知用户一切正常.服务应该在后台继续工作,用户应该不知道它.这是控制器操作的相关部分:

public function persistPostsAction() {

    ...
    if ($this->CheckUser($user_id) == 0) {
/*This function should be called on background thread*/
    $this->persistPosts($user_id);
    }

    ...

    return $this->render('FacebookAPIFacebookBundle:Page:postovi.html.twig', array(
                'FacebookPosts' => $pwu
    ));
}

如何$this->persistPosts($user_id);在另一个线程上调用函数然后继续执行?这类问题的最佳做法是什么?

1 个回答
  • PHP确实进行了多线程处理,可以找到pthreads的文档:http://php.net/pthreads

    许多用法示例:https://github.com/krakjoe/pthreads/tree/master/examples

    它不是简单的创建一个线程并允许它在完成服务请求时在后台执行,而你可以通过从服务请求的主线程中分离来做到这一点,这不是一个好主意.

    您从不真正想要直接响应Web请求创建任何线程,因为这只能扩展到目前为止.您想要做的事情是将应用程序的一部分分开,您需要不断运行,而不管网站的前端部分是做什么的.这个新分离的应用程序部分我们将其称为后端.应用程序的后端应该是一直运行的服务,与apache,fpm或nginx无关.它很可能使用多线程来最大化后端服务的吞吐量,你仍然需要一些简单的方法来进行前端和后端的通信; unix域套接字,tcp套接字等.通过应用程序的前端和后端之间的通信通道,前端可以传递数据并指示后端以适当的形式排队事务,而前端永远不必等待结果.这是一个更好的设计,不一定需要任何多线程,但毫无疑问它是候选者.

    重要的是要记住,在某些东西上投掷线程并不一定会让事情变得更好,唯一可以肯定的是,它会更加繁忙,性能不是默认使用的产品,你必须仔细考虑如何您将使用资源,如何在应用程序的组件部分之间进行通信,以及如何使用最少数量的线程(或实际上是进程)来获得最大吞吐量.

    2023-02-08 04:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有