C – 同时接收和处理来自unix套接字的数据

C – 同时接收和处理来自unix套接字的数据,第1张

概述我有一个C程序,通过Unix Sockets与 PHP通信.程序如下: PHP接受用户上传文件,然后向C发送“信号”,然后调度另一个进程(fork)解压缩文件(我知道这可以由PHP单独处理,这只是一个例子;整个问题更复杂). 问题是我不想说有4个进程同时运行.我认为这可以像这样解决:C,当它从PHP获取一个新的“任务”时将它转储到一个队列并逐个处理它们(确保运行时不超过4个)同时仍在监听插座. 我 我有一个C程序,通过Unix Sockets与 PHP通信.程序如下: PHP接受用户上传文件,然后向C发送“信号”,然后调度另一个进程(fork)解压缩文件(我知道这可以由PHP单独处理,这只是一个例子;整个问题更复杂).

问题是我不想说有4个进程同时运行.我认为这可以像这样解决:C,当它从PHP获取一个新的“任务”时将它转储到一个队列并逐个处理它们(确保运行时不超过4个)同时仍在监听插座.

我不确定如何实现这一点,因为我不能在同一个过程中做到这一点(或者我可以)?我以为我可以有另一个子进程来管理队列,父进程可以使用共享内存来访问,但这似乎过于复杂.还有其他方法吗?

提前致谢.

解决方法 如果您需要为每个任务处理程序创建单独的进程,那么您可以考虑使用五个单独的进程.第一个是侦听器,处理新的传入任务,并将其放入队列中.每个任务处理程序最初发送工作请求,以及完成处理任务的时间.当侦听器收到此请求时,它会将队列上的下一个任务传递给任务处理程序,或者如果任务队列为空,则将任务处理程序放在处理程序队列上.当任务队列从空转换为非空时,它会检查处理程序队列中是否有就绪任务处理程序.如果是这样,它将该任务处理程序从队列中取出,并将任务从任务队列传递到任务处理程序.

PHP进程将任务放入侦听器,而任务处理程序将从侦听器获取任务.监听器只是等待put或get请求,并处理它们.您可以将侦听器视为一个简单的Web服务器,但是每个到PHP进程和每个任务处理程序的套接字连接都可以是持久的.

由于套接字的数量很小而且持久,所以任何多路复用调用都可以工作(select,poll,epoll,kqueue,或者你的系统最好和/或可用的任何东西),但最简单的方法是使用一个单独的线程来处理每个插槽同步.然后,就绪任务处理程序队列将是任务队列上的信号量或条件变量.处理来自PHP进程的put的线程会将任务放在任务队列上,然后放置信号量.处理就绪任务的每个线程都会按下信号量,然后从任务队列中取出任务.任务队列本身可能本身需要相互独占保护,具体取决于它的实现方式.

总结

以上是内存溢出为你收集整理的C – 同时接收和处理来自unix套接字的数据全部内容,希望文章能够帮你解决C – 同时接收和处理来自unix套接字的数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存