Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP支持异步编程吗?_Php_Asp.net_Asynchronous - Fatal编程技术网

PHP支持异步编程吗?

PHP支持异步编程吗?,php,asp.net,asynchronous,Php,Asp.net,Asynchronous,我是PHP新手。我熟悉支持异步编程的ASP.NET。也就是说,如果一个请求需要做一些I/O工作。建议使用BeginProcess/EndProcess方式对网页进行编程。异步编程是提高可伸缩性的关键 我想知道在PHP世界中是否有异步编程的对应物(BeginXXXX/EndXXXX) 在.NET BeginXXX/EndXXX范例中,严重依赖于线程,而在PHP中,我不确定您是否可以启动一个新线程(除了可能的线程) 在大多数解释语言中,FastCGI是多线程的替代方案。它使用进程来代替产生新线程,但

我是PHP新手。我熟悉支持异步编程的ASP.NET。也就是说,如果一个请求需要做一些I/O工作。建议使用BeginProcess/EndProcess方式对网页进行编程。异步编程是提高可伸缩性的关键


我想知道在PHP世界中是否有异步编程的对应物(BeginXXXX/EndXXXX)

在.NET BeginXXX/EndXXX范例中,严重依赖于线程,而在PHP中,我不确定您是否可以启动一个新线程(除了可能的线程)


在大多数解释语言中,FastCGI是多线程的替代方案。它使用进程来代替产生新线程,但由于产生新进程的成本很高,它保留了一个可重用的进程池,就像.NET中的线程池一样。

核心有一组进程控制功能,包括分叉进程的能力。 我不知道我会在web脚本中使用它们,但以前在命令行脚本中使用过它们


如果使用套接字或文件执行I/O,则应分别使用stream_socket_select()或stream_select()(类似于C/C++中的系统调用)

下面是一个使用PHP完成的简单命令行聊天教程:


注意:这不是一个通用的多线程解决方案,而是一个用于需要“半并行”I/O的简单解决方案


PHP不支持,但在加载页面后可以使用AJAX,这将允许异步请求


老实说,这是没有意义的。如果你真的想要一个重量级的后端,你最好编写一个单独的程序来完成这项繁重的工作。据我所知,PHP模块是用纯C编写的,因此您应该能够使用它,然后从PHP调用自己的自定义函数。

使用stream\u select,您可以通过HTTP请求创建子进程。签出中的代码,以获取有关如何执行此操作的一些想法。我计划在对这个库进行进一步完善后,将其推送到github;可以在drupal之外运行的东西。但现在它生活在Drupal的土地上。

不幸的消息。所以,我们可以做的是分叉进程?是的,你们可以分叉进程,但由于这是一个昂贵的操作,我不确定你们会得到多少性能改进。当然,像往常一样,您可能需要进行测量。我认为在*nix操作系统中分叉过程应该是轻量级的。为了澄清前面的评论,请看一下这个。在一天结束时,您正在执行阻塞I/O调用,无论发生什么,对吗?如果请求正在执行IO,那么在IO进行时,它还执行什么操作?为什么不讲述一下PHP中发生的事情,看看如何利用PHP提供的功能来处理它。在ASP.NET中,每个请求都在一个线程中处理。由于作为资源的线程是有限的,我们不希望在I/O操作中阻塞线程。而且,在ASP.NET中,线程池的大小总是有限的。因此,开始/结束模式是必要的。我想PHP的情况就不同了。每个请求都在单个进程中处理?用fork进程来处理请求并不重要。因此,这种开始/结束异步编程模型是不必要的。