草庐IT

c++ - IPC 通过与 atomic_t 共享内存;它对 x86 有好处吗?

我有以下通过共享内存进行进程间通信的代码。一个进程写入日志,另一个进程从中读取。一种方法是使用信号量,但这里我使用类型为atomic_t的原子标志(log_flag),它驻留在共享内存中。日志(log_data)也被共享。现在的问题是,这是否适用于x86架构,或者我是否需要信号量或互斥锁?如果我使log_flag成为非原子的会怎样?鉴于x86具有严格的内存模型和主动缓存一致性,并且未对指针应用优化,我认为它仍然有效吗?编辑:请注意,我有一个8核的多核处理器,所以我对这里的繁忙等待没有任何问题!//Process1callsthisfunctionvoidwrite_log(void*d

linux - 在 (SVS-V) IPC 信号量上配置 SELinux 权限

我有一堆使用IPC信号量进行交互的程序(semget)。其中一个程序是Apache模块,它在(某种)受限的SELinux上下文中运行(我不太了解)。该模块能够与任何常规文件正确交互,当然前提是这些文件的SELinux安全上下文设置得当。但是-当我的(模块)访问IPC信号量时,semget调用失败并返回EPERM。当SELinux关闭时,我不会收到此错误。所以-显然我需要做一些事情来设置某种SELinux安全上下文或信号量上的一些东西才能让它工作。如果它是一个普通文件,我可以在上面调用“chcon”。因为它是一个System-VIPC信号量,所以我不能那样做。我该怎么做才能使这项工作成功

linux - IPC共享内存和线程内存的性能差异

我经常听说,与在线程之间访问进程内存相比,在进程之间访问共享内存段不会造成性能损失。换句话说,多线程应用程序不会比一组使用共享内存的进程更快(不包括锁定或其他同步问题)。但我有疑问:1)shmat()将本地进程虚拟内存映射到共享段。必须为每个共享内存地址执行此转换,并且可能代表巨大的成本。在多线程应用程序中,不需要额外的转换:所有VM地址都转换为物理地址,就像在不访问共享内存的常规进程中一样。2)共享内存段必须由内核以某种方式维护。例如,当所有连接到shm的进程都被关闭时,shm段仍然在运行并且最终可以被新启动的进程重新访问。可能会有一些与shm段上的内核操作相关的开销。多进程共享内存

android - 在 Android 中使用 Binder for IPC 的优势

在Android堆栈中使用BinderforIPC相比(信号量、消息队列、PIPES)有什么优势? 最佳答案 老问题(并且可能没有被发帖人关注),但值得回答:A)所有基于文件系统或文件系统可表示的IPC机制(尤其是管道)都不能使用,因为缺少全局可写目录,所有进程都可以在该目录中mkfifo/创建它们的文件系统/套接字表示IPC端口(尽管/dev/socket用于系统进程,例如rile、zygote等)。B)建议的机制均不具备Android所需的“服务定位”功能。在UNIX中,有一个RPC端口映射器,而Android需要类似的功能。输

c++ - 共享内存 IPC 同步(无锁)

考虑以下场景:要求:Intelx64服务器(多个CPU插槽=>NUMA)Ubuntu12、GCC4.6两个进程通过(命名)共享内存共享大量数据经典的生产者-消费者场景内存排列在一个循环缓冲区中(有M个元素)程序序列(伪代码):流程A(生产者):intbufferPos=0;while(true){if(isBufferEmpty(bufferPos)){writeData(bufferPos);setBufferFull(bufferPos);bufferPos=(bufferPos+1)%M;}}流程B(消费者):intbufferPos=0;while(true){if(isBuf

python - 如何使用 Zeromq 的 inproc 和 ipc 传输?

我是ZERMQ的新手。ZeroMQ有TCP、INPROC和IPC传输。我正在寻找在Winx64和python2.7中使用python和inproc的示例,它们也可用于linux。另外,我一直在寻找UDP传输方法,但找不到示例。我发现的唯一例子是importzmqimportzhelperscontext=zmq.Context()sink=context.socket(zmq.ROUTER)sink.bind("inproc://example")#Firstallow0MQtosettheidentityanonymous=context.socket(zmq.XREQ)anonym

python - 无法让 ZeroMQ python 绑定(bind)通过 IPC 接收消息

我正在尝试通过IPC实现PUB/SUB。如果我更改了下面的代码,以便订阅者绑定(bind)到“tcp://*:5000”并且发布者连接到“tcp://localhost:5000”,它可以工作,但我无法让它通过IPC工作。我做错了什么?订阅者.pyimportzmq,jsondefmain():context=zmq.Context()subscriber=context.socket(zmq.SUB)subscriber.bind("ipc://test")subscriber.setsockopt(zmq.SUBSCRIBE,'')whileTrue:printsubscriber

python - 高效的 Python 到 Python IPC

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭3年前。Improvethisquestion什么是inter-processcommunication(IPC)具有以下要求的框架\技术:在两个Python进程之间传输原生Python对象时间和CPU效率高(与RAM效率无关)跨平台Win\Linux很高兴拥有:与PyPy合作更新1:进程位于同一主机上并使用相同版本的Python和其他模块更新2:进程由用户独立运行,没有一个进程产生其他进程 最佳答案

android - Android 操作系统中可用的 IPC 机制有哪些?

谁能告诉我Android中存在的所有IPC机制是什么。据我所知:IntentBinder 最佳答案 IPC是进程间通信。它描述了不同类型的android组件用于相互通信的机制。1)Intents是组件可以发送和接收的消息。它是一种在进程之间传递数据的通用机制。在Intent的帮助下,我们可以启动服务或Activity,调用广播接收器等等。2)Bundles是通过的数据实体。它类似于对象的序列化,但在android上要快得多。Bundle可以通过getExtras()方法从Intent中读取。3)Binders是允许Activity和

c++ - C++ 和 Python 之间的简单 IPC(跨平台)

我有一个在后台运行的C++进程,它将不频繁地生成“事件”,而在同一机器上运行的Python进程将需要接收。C端的代码需要尽可能的轻量级。Python端是只读的。实现必须是跨平台的。发送的数据非常简单。我有什么选择?谢谢 最佳答案 zeromq——没有别的了。将消息编码为字符串。但是,如果您想从库中获取序列化,请使用protobuf它将为Python和C++生成类。您在任一端使用SerializeToString()和ParseFromString()函数,然后通过ZeroMq管道传输字符串。问题已解决,因为我怀疑任何其他解决方案都更