看什麼情況下使用,方法很多。
如果呼叫頻度不高,我做量化分析程式一般是用c++啟用python程序,用的pypy速度快點,pypy生成結果到redis或mysql的記憶體表中,呼叫結束後c++去redis或mysql的記憶體表中取出來,你也可以使用檔案寫入來完成,但檔案寫入容易出現不同步問題,不想用網路版的,可以用sqlite寫入結果,再在另外一個程式用sqlite讀取。如果類似網際網路業務,可以使用訊息佇列,訊息伺服器通訊。如果你的程式需要執行緒安全,需要臨界區保護,最好用訊息佇列這種支援多執行緒多程序同時訪問,訊息佇列比資料庫儲存要快,但沒有資料庫方便。
有個c++版的本機版vedis,高仿redis的嵌入版,你可以用這個初期開發,如果需要切換到redis,很容易修改vedis成redis,ssdb可以把redis落地儲存,ssdb是高仿redis的儲存版。
如果沒有資料儲存,可以使用socket通訊,或用多程序通訊,如chrome是多程序的,通訊用的命名管道(Named Pipe),多語言之間呼叫理論上可以用這個。命名管道要比訊息佇列快,但需要自己定製。呼叫方法的協議,可以使用json來完成,這樣n多語言都可以通用,如果追求效能可能使用二進位制通訊協議。
python呼叫c語言方法也很成熟,但需要自己寫一些程式碼包裝一下,需要防止記憶體洩漏,多執行緒同步,阻塞,異常等問題。
看什麼情況下使用,方法很多。
如果呼叫頻度不高,我做量化分析程式一般是用c++啟用python程序,用的pypy速度快點,pypy生成結果到redis或mysql的記憶體表中,呼叫結束後c++去redis或mysql的記憶體表中取出來,你也可以使用檔案寫入來完成,但檔案寫入容易出現不同步問題,不想用網路版的,可以用sqlite寫入結果,再在另外一個程式用sqlite讀取。如果類似網際網路業務,可以使用訊息佇列,訊息伺服器通訊。如果你的程式需要執行緒安全,需要臨界區保護,最好用訊息佇列這種支援多執行緒多程序同時訪問,訊息佇列比資料庫儲存要快,但沒有資料庫方便。
有個c++版的本機版vedis,高仿redis的嵌入版,你可以用這個初期開發,如果需要切換到redis,很容易修改vedis成redis,ssdb可以把redis落地儲存,ssdb是高仿redis的儲存版。
如果沒有資料儲存,可以使用socket通訊,或用多程序通訊,如chrome是多程序的,通訊用的命名管道(Named Pipe),多語言之間呼叫理論上可以用這個。命名管道要比訊息佇列快,但需要自己定製。呼叫方法的協議,可以使用json來完成,這樣n多語言都可以通用,如果追求效能可能使用二進位制通訊協議。
python呼叫c語言方法也很成熟,但需要自己寫一些程式碼包裝一下,需要防止記憶體洩漏,多執行緒同步,阻塞,異常等問題。