c 程序間通訊 IPC

2022-03-07 04:05:16 字數 2146 閱讀 5075

最近在除錯乙個演算法,想通過改變演算法的引數看看結果有什麼變化。 碰到乙個麻煩的事情是,從磁碟載入、構建資料需要15分鐘。這就比較討厭了,也就是說我每次調乙個引數前都要等15分鐘啟動時間?

於是我就想,能不能開乙個datahost程序專門載入資料。我在別的程序除錯引數,但需要用資料時就直接從datahost程序中載入現成的資料。 這樣的話我只需要從磁碟載入一次資料。 於是找了一下, c#有個叫ipc(inter process communication)的功能可以實現同一臺機器上的不同程序間通訊。

注意我這裡的scenario:我需要程序間通訊「資料物件」, 而不是訊息。 通訊訊息比較好辦,就傳乙個string流就行了。而我需要傳遞的是資料物件,比如乙個dictionary, 或者自定義class。

ipc的大致過程是這樣的:datahost程序先繫結乙個物件,client根據物件的uri去訪問物件類, 並且呼叫該類的方法。datahost程序接收到從client發來的呼叫,就會例項化乙個物件(注意,在這個時候才開始例項化乙個物件,這也是我的**裡使用static的原因),並且執行相關的函式,再把結果返回給client。 注意執行過程是在datahost端的。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

ipcserver

public dictionarygetsalary()

public

dataobj()

", dataobj.constructercnt);}}

}

using

system;

using

system.collections.generic;

using

system.linq;

using

system.runtime.remoting;

using

system.runtime.remoting.channels;

using

system.runtime.remoting.channels.ipc;

using

system.text;

using

system.threading.tasks;

namespace

ipcserver

}}

using

ipcserver;

using

system;

using

system.collections.generic;

using

system.linq;

using

system.runtime.remoting.channels;

using

system.runtime.remoting.channels.ipc;

using

system.text;

using

system.threading.tasks;

namespace

ipcclient

", t);

try

catch

(exception e)

if (obj == null

)

else,"

, pair.key, pair.value);

}console.writeline(

"counter =

", obj.getsalary());

dataobj.counter++;}}

console.writeline(

"mission complete!");

console.readkey();}}

}

事實上結果並沒有加速。估計ipc也是把物件序列化後傳遞,再反序列化的吧。 桑心。

next steps: 尋找一種直接讀其他程序的記憶體空間的途徑。。。

轉至:

程序間通訊IPC

這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...

程序間通訊 IPC

part2 index1.html part2 index2.html linux至少支援如下ipc機制 同時支援posix和system v方式 streams ipc機制,linux本身不支援,有乙個單獨的安裝包 可以跨pc的程序通訊 互斥鎖或條件變數 動態初始化 不能使靜態分配 在共享記憶體中...

程序間通訊IPC

乙個大型的應用系統,往往需要眾多程序協作,程序間通訊的重要性顯而易見。首先,程序間通訊至少可以通過傳送開啟檔案來實現,不同的程序通過乙個或多個檔案來傳遞資訊,事實上,在很多應用系統裡,都使用了這種方法。但一般說來,程序間通訊 ipc interprocess communication 不包括這種似...