标签: ipc

共享内存与Go通道通信

Go的口号之一是不要通过共享记忆来沟通; 相反,通过沟通分享记忆.

我想知道Go是否允许在同一台机器上运行的两个不同的Go-compiled二进制文件相互通信(即客户端 - 服务器),以及与C++中的boost :: interprocess相比有多快?到目前为止,我看到的所有例子都只说明了相同程序例程之间的通信.

一个简单的Go示例(具有单独的客户端和服务器代码)将非常感谢!

ipc channel shared-memory go goroutine

21
推荐指数
1
解决办法
3157
查看次数

在主线程和子线程之间使用TThread的"同步"或使用窗口消息进行IPC更好吗?

我有一个用Delphi 2007编写的相当简单的多线程VCL gui应用程序.我在多个子线程(最多16个并发)中进行一些处理,需要更新主窗体上的网格控件(只需将字符串发布到网格中).没有任何子线程彼此交谈.

我的初始设计涉及调用TThread的"Synchronize"来更新当前运行的线程中的网格控件表单.但是,据我所知,调用Synchronize实际上就好像它是调用时的主线程一样.一次运行多达16个线程(并且大多数子线程的处理时间从<1秒到10秒),Window Messages是一个更好的设计吗?

我已经让它工作在这一点,子线程发布一个Windows消息(由几个字符串的记录组成),主线程有一个监听器,只是在收到消息时更新网格.

在这种情况下对IPC的最佳方法有何看法?窗口消息或'同步'?

如果我使用窗口消息,您是否建议将代码包装在我在TCriticalSection(进入和离开)块中发布到网格的位置?或者我不需要担心线程安全,因为我在主线程中写入网格(虽然在窗口消息处理程序的函数内)?

delphi multithreading ipc

21
推荐指数
3
解决办法
1万
查看次数

无法获得ZeroMQ python绑定以通过IPC接收消息

我正在尝试通过IPC实现PUB/SUB.如果我改变了下面的代码,以便用户结合"TCP://*:5000"和出版商连接到"TCP://本地主机:5000"它的工作原理,但我不能让它工作在IPC.我究竟做错了什么?

subscriber.py

import zmq, json

def main():
    context = zmq.Context()
    subscriber = context.socket(zmq.SUB)
    subscriber.bind("ipc://test")
    subscriber.setsockopt(zmq.SUBSCRIBE, '')
    while True:
        print subscriber.recv()

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

publisher.py

import zmq, json, time

def main():
    context = zmq.Context()
    publisher = context.socket(zmq.PUB)
    publisher.connect("ipc://test")
    while True:
        publisher.send( "hello world" )
        time.sleep( 1 )

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

python ipc zeromq

21
推荐指数
1
解决办法
6985
查看次数

Windows上本地IPC的套接字与命名管道?

是否有任何理由支持在套接字上使用命名管道进行本地IPC(使用win-api),Effective-wize,resource-wize或其他方式,因为两者的行为非常相似(并且可能通过相似的接口抽象),在一个可能已经使用套接字用于网络目的的应用程序中?

我至少可以说出寻址问题:套接字的端口号与管道的文件名.此外,命名管道(AFAIK)不会警告防火墙(阻止/取消阻止对话框),尽管被阻止的应用程序仍然可以通过本地套接字进行通信.还有什么需要考虑的吗?

在使用套接字的情况下,在本地使用套接字时是否有任何winsock设置/标志?

sockets winapi ipc named-pipes

20
推荐指数
2
解决办法
1万
查看次数

C++中的快速跨平台进程间通信

我正在寻找一种方法来获得两个程序,以有效地相互传输大量数据,这需要在Linux和Windows上,在C++中工作.这里的上下文是P2P网络程序,其充当网络上的节点并且连续运行,并且其他应用程序(可能是游戏因此需要快速解决方案)将使用它来与网络中的其他节点通信.如果有更好的解决方案,我会感兴趣.

c++ p2p ipc

20
推荐指数
2
解决办法
1万
查看次数

可以使用像IPC这样的Mac OS X XPC在进程之间交换消息吗?怎么样?

根据Apple的说法,Lion中引入的新XPC服务API提供了一种轻量级机制,用于与Grand Central Dispatch(GCD)集成并启动的基本进程间通信.

似乎可以将此API用作一种IPC,如POSIX IPC,但是,我找不到如何做到这一点.

我正在尝试使用XPC API传递两个进程,因此我可以在它们之间传递消息,但我总是在服务器端出现"XPC连接无效"错误.

我不想要XPC服务,我只想使用客户端 - 服务器架构交换消息.

我使用两个类似BSD的进程,所以没有Info.plist或者其他什么......

我一直关注这个讨论http://lists.macosforge.org/pipermail/launchd-dev/2011-November/000982.html但是这个主题看起来有点模糊和无证.

谢谢!

macos ipc xpc sandbox osx-lion

20
推荐指数
3
解决办法
1万
查看次数

简单的进程间通信

我正在寻找一种简单的方法将消息从一个进程(Perl脚本,短命)传递到另一个进程(Python脚本,长时间运行) - 这两个进程都是同一台机器的本地进程.我做了一些研究,但我发现的要么是在我头上还是看起来不必要的复杂 - 让我有点迷茫和迷茫.

我想象一个大致如下的最小例子:

# listener.py

class Listener:
    def __init__(self, port)
        self.port = port

    def on_message(self, msg):
        print "%s: %s" % (timestamp, msg)

recipient = Listener(1234)


# sender.pl

sub send_message {
    my ($msg, $port) = @_;
    # ...
}

send_message("hello world", 1234);
Run Code Online (Sandbox Code Playgroud)

任何有关如何解决和/或在何处阅读的指示将不胜感激!

python perl ipc

19
推荐指数
3
解决办法
2万
查看次数

通过使用mmap()在进程之间共享内存

我在Linux 2.6.我有一个环境,其中2个进程通过简单的消息传递模式实现模拟(使用共享内存)数据交换.

我有一个客户端进程(从父服务器分叉,它是服务器),它将结构(消息)写入创建的内存映射区域(在fork之后):

message *m = mmap(NULL, sizeof(message), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0)

然后,该指针被写入到队列(在链接列表的形式)转换成是共同的服务器和客户端处理(因为如果事先创建上面相同的代码叉)另一个共享存储器区域.然后由服务器读取该区域,该服务器获得指向消息的指针并对其进行处理.

问题是*m是在fork()之后创建的,当服务器进程尝试访问指向的内存位置时,我得到了分段错误.在客户端创建后,是否可以将该内存区域附加到服务器POST分叉?

注意:我不想在分叉之前将指针映射到消息(然后在服务器之前共享它)因为我通常不知道客户端想要发送到服务器的消息数量,而且可能还有更多消息比一个客户端进程,所以我想只在客户端需要发送消息时创建一个新的共享内存块,并在服务器收到该消息后取消映射.

注意:这是出于学术目的:我知道这不是解决这个问题的最佳方法,但我只需要遵循这条道路.

提前致谢!

c linux ipc mmap shared-memory

19
推荐指数
3
解决办法
3万
查看次数

MPI_Send()和MPI_Ssend()之间的区别?

我知道MPI_Send()是一个阻塞调用,它等待修改应用程序缓冲区以便重用是安全的.为了使发送调用同步(应该与接收器握手),我们需要使用MPI_Ssend().我想知道两者之间的区别.假设我需要在进程中发送固定数量的字节,哪一个应该花费更长的时间?
对我来说,代码适用于MPI_Send()调用,但无限期地等待MPI_Ssend().可能的原因是什么?

最重要的是,我非常确定在使用时接收过程中正在接收数据MPI_Send(),因此这种推断无助于在使用时等待握手MPI_Ssend().

或者我可以得出结论:MPI_Send()您可以将数据发送到自我过程但不能使用MPI_Ssend()

ipc mpi openmpi

19
推荐指数
1
解决办法
1万
查看次数

在多进程模式下使用SharedPreferences

我已经定义了SharedPreferences在多进程模式上使用的实例.

public class Prefs {

    private static SharedPreferences prefs;
    private static SharedPreferences.Editor editor;

    private static void init(Context context) {

        prefs = context.getSharedPreferences("alaki",
                Context.MODE_MULTI_PROCESS);
        editor = prefs.edit();
    }

// static methods to set and get preferences
}
Run Code Online (Sandbox Code Playgroud)

现在我在一个服务上使用这个类,使用单独的进程,也在我的主应用程序进程中以静态方式使用.
一切进展顺利,但有时会删除SharedPreferences实例上的所有存储数据!
我怎么解决这个问题?

编辑:最后我用IPC解决了我的问题.

service android ipc multiprocessing sharedpreferences

19
推荐指数
2
解决办法
1万
查看次数