最近在做一个东西, 用python写, wsgi的接口, 部署在sae, sae的服务器应该是nginx吧. 当然, 解决方案不一定是python的, php也可以, 但是千万不要跟我说自己实现一个服务器, 现在是nginx, nginx... .
情况是这样的: 有两个并发的请求, 记作a和b吧, 对于服务器来说是两个线程. a执行到一半, 阻塞下来, 直到b给a发出信号, a才继续执行下去.
这样好像有一个蛮直观的方法: 在cache或者数据库里面设置一个布尔, 当作mutex用. 但是我阻塞的时候, 我就需要不停地去对数据库进行轮询, 这样耗费的资源实在太多. 所以我就想, 有没有办法曲线救国, 去调用系统里的(渣浪的系统大概是linux, 也就是pthread的) mutex api呢. 如果两个请求同一个进程, 那么也许可以把mutex的地址保存到数据库......好吧我大概想多了.
不要用死循环(就算+sleep)去轮询, 我什么都愿意.
回复内容: 最近在做一个东西, 用python写, wsgi的接口, 部署在sae, sae的服务器应该是nginx吧. 当然, 解决方案不一定是python的, php也可以, 但是千万不要跟我说自己实现一个服务器, 现在是nginx, nginx... .
情况是这样的: 有两个并发的请求, 记作a和b吧, 对于服务器来说是两个线程. a执行到一半, 阻塞下来, 直到b给a发出信号, a才继续执行下去.
这样好像有一个蛮直观的方法: 在cache或者数据库里面设置一个布尔, 当作mutex用. 但是我阻塞的时候, 我就需要不停地去对数据库进行轮询, 这样耗费的资源实在太多. 所以我就想, 有没有办法曲线救国, 去调用系统里的(渣浪的系统大概是linux, 也就是pthread的) mutex api呢. 如果两个请求同一个进程, 那么也许可以把mutex的地址保存到数据库......好吧我大概想多了.
不要用死循环(就算+sleep)去轮询, 我什么都愿意.
可否使用命名管道呢
查阅一下php官方文档 进程控制扩展 里面的 posix_kill 是否可以?
=_=! 不是太懂题主的意思,可能是说 a 和 b 一块运行,a运行到一半不运行了然后等待 b 的通知再执行,是这个意思么?
如果是这个意思的话我觉得你可以把 a 拆成 a' 和 c 两部分,a' 为接受 b 通知之前的代码,c 为接受 b 通知之后的代码。a' 和 b 执行完毕了都跳转到 c 去执行代码。c 代码首先要检测 a' 和 b 处理的内容是否完备,未完备则停止运行。当然处理的数据都最好用外部的存储存储起来。我觉得这样应该是最简单的实现方法了吧。
另外,如果是 sae 的话就不要做他想了,限制超多的根本不太可能会让你接触到系统级别的接口之类的。