|
|
1
1
这真的很混乱-你试图应用非常复杂的技术-但你完全用错误的方式应用它们。 fork创建当前进程的新运行副本。Exec启动一个新进程。你不能同时使用它们来启动一个进程。
应尽可能避免批量处理。数据通常以有限的速率到达(尽管速率可能是随机的)-通常避免批处理的正确方法是同步或通过排队处理请求。当批量处理不可避免时,并行化和/或流水线处理 提高吞吐量。虽然有许多复杂的方法可以实现这一点(例如map reduce),但是仅仅对数据进行分片通常就足够了。虽然你的基本想法相当于分成几个部分,但这: 1) 会比处理小批量产品效率低 2) 很难限制系统的资源消耗(如果生成500个进程,而DBMS只支持200个并发连接呢?) 假设您不能同时处理处理,并且使用多个订阅者运行一个队列是不实际的,我建议将数据分成(数量有限的)较小的批并生成处理这些数据的进程。请注意,popen()、proc_open()和pcntl_fork()在派生进程的执行期间不会阻塞。(提示-使用 modulus operator ) 如果您想从HTTP请求启动处理(或者有另一个理由在单独的会话组中运行它们),那么就使用google for'PHP long running processes setid'。 |
|
|
2
0
这没道理。一旦exec()运行不同的代码 不能 fork()之后。 |
|
|
3
0
既然已经定义了fork和exec,fork就不会做您想要的事情了。它将把所有当前脚本环境复制到新空间,包括文件描述符 . 是的,这是正确的-孩子和父母共享相同的文件描述符。 想象一下当使用维护自己文件描述符的mysql扩展时会带来的灾难;-) |
|
|
James G · 分叉过程每次打印的方式不同 8 年前 |
|
|
Filip Spasovski · fork()从何处开始[重复] 8 年前 |
|
|
Alopex · 如何从子进程到父进程获取返回值? 8 年前 |
|
|
TheAndreyx22 · 查看execvp(); 8 年前 |
|
|
Jacob H · 如何写入正在运行的程序的stdin 8 年前 |
|
|
Pedro · execlp()无法检索正确的输入 8 年前 |
|
|
Giorgi Cercvadze · 如何将暂停的进程设置为后台? 8 年前 |
|
|
S. N · 使用C创建子进程和父进程 8 年前 |
|
|
funcs · 无限循环中来自子级的read()标准输出 8 年前 |