问题是我不想说有4个进程同时运行.我认为这可以像这样解决:C,当它从PHP获取一个新的“任务”时将它转储到一个队列并逐个处理它们(确保运行时不超过4个)同时仍在监听插座.
我不确定如何实现这一点,因为我不能在同一个过程中做到这一点(或者我可以)?我以为我可以有另一个子进程来管理队列,父进程可以使用共享内存来访问,但这似乎过于复杂.还有其他方法吗?
提前致谢.
解决方法 如果您需要为每个任务处理程序创建单独的进程,那么您可以考虑使用五个单独的进程.第一个是侦听器,处理新的传入任务,并将其放入队列中.每个任务处理程序最初发送工作请求,以及完成处理任务的时间.当侦听器收到此请求时,它会将队列上的下一个任务传递给任务处理程序,或者如果任务队列为空,则将任务处理程序放在处理程序队列上.当任务队列从空转换为非空时,它会检查处理程序队列中是否有就绪任务处理程序.如果是这样,它将该任务处理程序从队列中取出,并将任务从任务队列传递到任务处理程序.PHP进程将任务放入侦听器,而任务处理程序将从侦听器获取任务.监听器只是等待put或get请求,并处理它们.您可以将侦听器视为一个简单的Web服务器,但是每个到PHP进程和每个任务处理程序的套接字连接都可以是持久的.
由于套接字的数量很小而且持久,所以任何多路复用调用都可以工作(select,poll,epoll,kqueue,或者你的系统最好和/或可用的任何东西),但最简单的方法是使用一个单独的线程来处理每个插槽同步.然后,就绪任务处理程序队列将是任务队列上的信号量或条件变量.处理来自PHP进程的put的线程会将任务放在任务队列上,然后放置信号量.处理就绪任务的每个线程都会按下信号量,然后从任务队列中取出任务.任务队列本身可能本身需要相互独占保护,具体取决于它的实现方式.
总结以上是内存溢出为你收集整理的C – 同时接收和处理来自unix套接字的数据全部内容,希望文章能够帮你解决C – 同时接收和处理来自unix套接字的数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)