当前位置: 技术问答>linux和unix
关于多进程通信的问题
来源: 互联网 发布时间:2015-11-01
本文导语: 我的主服务器每次接到请求(socket)都会fork出新的进程去处理请求,但是子进程返回给客户的数据却是在父进程里,要从父进程里获得数据,然后返回给客户。pipe和共享内存可以实现这种方式,但是用pipe就阻塞住主服...
我的主服务器每次接到请求(socket)都会fork出新的进程去处理请求,但是子进程返回给客户的数据却是在父进程里,要从父进程里获得数据,然后返回给客户。pipe和共享内存可以实现这种方式,但是用pipe就阻塞住主服务器了,服务器还要接受其它的socket请求。不知如何实现这个功能好,比如一些其它的服务器比如apache等,是如何实现这种功能的。
|
如果子进程也要操作这些数据的话,用共享内存吧。
父子进程的通信问题也可以用信号与消息队列来处理。
父子进程的通信问题也可以用信号与消息队列来处理。
|
fork()出的子进程是共享父进程的数据的,你可以取得那个数据。
|
共享内存+信号量是最理想的。
不过话说回来,如果只是读取一些url发给客户干的活不多的话,其实也没必要fork.fork本身也费时间费资源。能简单处理就简单处理。
不过话说回来,如果只是读取一些url发给客户干的活不多的话,其实也没必要fork.fork本身也费时间费资源。能简单处理就简单处理。
|
显然,多线程是个最最简单易行的办法。
共享内存可能不是个好办法。那些url到底有多少,很难估算空间。
我觉得楼主可能担心的问题在于socket io的阻塞问题,所有要fork。
一种方法是使用异步非阻塞io,单进程实现,效率应该超强。
另外一种方法是实现一个单独的url管理服务,接入应用fork出来的子进程跟该服务进行daemon socket通讯。
不过,呵呵,还是多线程来的爽快。
共享内存可能不是个好办法。那些url到底有多少,很难估算空间。
我觉得楼主可能担心的问题在于socket io的阻塞问题,所有要fork。
一种方法是使用异步非阻塞io,单进程实现,效率应该超强。
另外一种方法是实现一个单独的url管理服务,接入应用fork出来的子进程跟该服务进行daemon socket通讯。
不过,呵呵,还是多线程来的爽快。