我有一個簡單的C++應用程序,它可以在我的web應用程序的後端生成報告(簡單的LAMP設置)。問題是後端加載的數據文件在內存中大約需要1.5GB。如果多個用戶同時運行它,這不會很好地擴展,所以我的想法是分成幾個程序:
程序A是一直運行在服務器上的主要可執行文件,並且始終裝入數據,並且實際上可以運行報告。
程序B是從PHP衍生出來的,並提出一個簡單的請求,讓程序A獲得它所需的信息並返回數據。
所以我的問題是這樣的: 什麼是B讓A做某事的好機制? 當A無關時它應該如何工作?我並不是真的想要投票任務或輪換我的輪胎。C++中的進程間通信
回答
使用一個命名的互斥/事件,基本上這是允許一個線程(在你的情況下的進程A)坐在那裏等待。然後進程B出現,需要完成一些事情,併發出這個喚醒進程A的互斥/事件的信號,然後繼續。
如果你是微軟:
IPC在Linux上的工作方式不同,但具有相同的功能:
或者,對於C++部分你可以使用其中一個多平臺的boost IPC庫。我不確定什麼PHP可用,但它無疑具有相同的東西。
+1無需打網卡,特別是如果您在同一個盒子上運行網絡服務器。 – Alex 2009-08-27 21:03:15
+1表示提升進程。 http://www.boost.org/doc/libs/1_39_0/doc/html/interprocess.html – Laserallan 2009-08-27 21:06:44
謝謝!我想我會使用一對Boost消息隊列。 – captncraig 2009-08-27 21:57:33
使用運行於localhost
上的TCP套接字。
- 使C++應用程序成爲守護進程。
- PHP前端創建到守護進程的持久連接。 pfsockopen
- 當發出請求時,PHP向守護進程發送一個請求,然後處理併發回它。 PHP SocketsC++ Sockets
編輯
增加了一些鏈接以供參考。我可能有一些真的很不好 C代碼在某處使用進程間通信套接字,但沒有什麼好用的。
看起來很有趣。但對我來說聽起來很陌生。你知道任何有用的參考資料或例子嗎? – captncraig 2009-08-27 20:54:21
IPC在C++上很簡單,只需調用POSIX C API即可。
但是你問的問題會更好地由隊列管理器提供。讓後臺進程等待隊列中的消息,前端PHP只是在那裏添加它想要處理的任務的規範。某些隊列管理器允許將任務的結果添加到同一個對象,或者可以爲完成消息定義一個新的隊列。
最着名的高性能隊列管理器之一是RabbitMQ。另一個非常容易使用的是MemcacheQ。
或者,您可以將任務添加到MySQL中,後臺進程只是定期查詢未完成的任務。這是有效的,並且可以非常可靠(有時稱爲貧民窟隊列),但是以高速度/秒來分解。
是的,它真的聽起來像消息隊列是我想要使用的。它將允許後臺進程在沒有消息時阻塞,否則將工作得很好。謝謝! – captncraig 2009-08-27 21:23:31
- 1. c/C++中的進程間通信
- 2. 如何在C#中進行進程間通信時進行進程間通信?
- 3. C - execvp()進程間通信
- 4. 進程間通信Unix C
- 5. C中的進程間通信
- 6. C#中的LAN進程間通信?
- 7. 進程間通信
- 8. 進程間通信
- 9. Lua和C進程間通信#
- 10. 進程之間的通信
- 11. 通過C++網絡進行的進程間通信
- 12. C++和vb.net應用程序之間的進程間通信
- 13. linux設計中的進程間通信
- 14. F#中的進程間通信
- 15. VHDL中進程之間的通信
- 16. Lua中的進程間通信
- 17. Qt4中簡單的進程間通信
- 18. UWP中的進程間通信
- 19. 進程間通信推薦
- 20. 進程間通信Python
- 21. 探聽進程間通信
- 22. Java進程間通信
- 23. 進程間通信SYSTEM_INFO structture
- 24. 進程間通信/廣播
- 25. Python進程間通信
- 26. ruby進程間通信
- 27. Sniff進程間通信
- 28. Java進程間通信
- 29. SystemTap進程間通信
- 30. 不同的.c文件之間的IPC進程間通信
對不起...這一切都在Linux中運行。 – captncraig 2009-08-27 20:45:51
自從您提到LAMP以來,我添加了linux標記。 IPC取決於平臺,所以這很重要。 – 2009-08-27 20:46:01