程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> socket-進程池實現的多進程服務器問題

socket-進程池實現的多進程服務器問題

編輯:編程解疑
進程池實現的多進程服務器問題

main函數中先實現進程池。主進程創建pipe管道,fork出一個子進程,作為控制進程,在控制進程中fork多個子進程作為業務處理進程,全部阻塞。
接著主進程開始socket一系列操作,在accept阻塞。
while(1){
connect_socket = accepet();
...
kill(control_pid,SIGUSR1);
}
現在我把connect_socket描述符通過pipe管道傳給控制進程,通過控制進程去調度業務進程處理業務。
那麼問題來了,我用signal SIGSUR1去通知控制進程任務到來。現在多個客戶端幾乎同時連接服務端,該如何實現控制進程接受任務取得pipe中的連接套接字而不重入導致部分任務被忽略?

我之前的做法是定義一個全局原子變量count,信號處理函數中++count,在控制進程中通過判斷count與上次循環的值做比較判斷任務是否到來。但是信號處理函數返回後如果立刻又接受到信號會導致任務忽略。
求大牛們幫忙給個更好的處理方案,原則是pipe管道的通信方式不變,因為通過共享內存實現的話我不需要控制進程調度業務進程了,主進程完全可以實現調度,現在需要解決的就是如何實現給控制進程發送信號無論什麼情況下他都不會遺漏接收連接套字並且傳輸給業務進程通知處理。謝謝

不知道在算法層面能否解決這個問題,如果能解決的話更好了

最佳回答:


http://www.cnblogs.com/Bozh/archive/2012/04/21/2461074.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved