小编Ris*_*hiD的帖子

使用哪种Linux IPC技术?

我们仍处于项目的设计阶段,但我们正在考虑在嵌入式Linux内核上有三个独立的进程.其中一个过程是通信模块,它通过各种介质处理与设备之间的所有通信.

其他两个进程需要能够通过通信过程发送/接收消息.我正在尝试评估Linux提供的IPC技术; 其他进程将发送的消息大小各不相同,从调试日志到流媒体,速率约为5 Mbit.此外,媒体可以同时流入和流出.

您对此应用建议使用哪种IPC技术? http://en.wikipedia.org/wiki/Inter-process_communication

处理器运行大约400-500 Mhz,如果这改变了什么.不需要跨平台,只有Linux才行.需要使用C或C++实现.

linux ipc

67
推荐指数
4
解决办法
8万
查看次数

带有Doxygen的自定义标签

我想弄清楚是否有办法使用Doxygen创建自定义标签.我确实找到了ALIAS配置文件选项,但这并不能完全满足我的需要.基本上在我的代码中,我希望能够编写类似的东西

/// \req Requirement #322 - blah blah
Run Code Online (Sandbox Code Playgroud)

再有Doxygen的创建列表像它的\bug,并\todo具有此定制标记线命令.Doxygen可以实现吗?

doxygen

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

在CMake中有任何方式需要GCC版本4+吗?

我正在使用GCC v4 +中提供的一些功能,并希望CMake找到GCC v4编译器,如果找不到它,则返回错误,说明需要GCC v4.

任何人都有关于如何做这样的事情的任何模块/想法?

谢谢.

gcc cmake

7
推荐指数
2
解决办法
4118
查看次数

UDP通过环回发送性能

背景

我有一个非常高吞吐量/低延迟的网络应用程序(目标是每包5个usec),我想添加一些监控/指标.我听说过statsd热潮,似乎是收集指标并将它们输入我们的时间序列数据库的简单方法.发送指标是通过将小udp数据包写入守护程序(通常在同一服务器上运行)完成的.

我想描述在我的数据路径中发送~5-10 udp数据包的效果,以了解它会增加多少延迟,并对它有多糟糕感到惊讶.我知道这是一个非常模糊的微观基准,但只是想了解它的落脚点.

我的问题

我试图理解为什么需要这么长时间(相对来说)将UDP数据包发送到localhost而不是远程主机.我是否可以进行任何调整以减少发送UDP数据包的延迟?我正在考虑解决方案让我将度量标准集合推送到辅助核心,或者在单独的主机上实际运行statsd守护程序.


我的设置/基准

CentOS 6.5带有一些强大的服务器硬件.
我一直在使用的客户端测试程序可以在这里找到: https:
//gist.github.com/rishid/9178261使用gcc编译4.7.3 gcc -O3 -std=gnu99 -mtune=native udp_send_bm.c -lrt -o udp_send_bm
接收方正在运行nc -ulk 127.0.0.1 12000 > /dev/null(ip更改为IF)

我用以下设备运行了这个微基准测试.
一些基准结果:

  • 回送
    • 数据包大小500 //每个发送的时间()2159 nanosec //总时间2.159518
  • 集成1 Gb主板控制器
    • 数据包大小500 //每个发送时间()397 nanosec //总时间0.397234
  • 英特尔ixgbe 10 Gb
    • 数据包大小500 //每个发送时间()449 nanosec //总时间0.449355
  • 具有用户空间堆栈的solarflare 10 Gb(onload)
    • 数据包大小500 //每个发送时间()317 nanosec //总时间0.317229

c sockets linux performance udp

7
推荐指数
1
解决办法
2597
查看次数

以编程方式在C中插入和删除内核模块

反正有没有从C/C++代码做"insmod"和"rmmod"?除了运行系统(...)之外,是否有内核API可以让我这样做?

c linux kernel module

6
推荐指数
1
解决办法
1446
查看次数

POSIX Message Queue是否通过内核空间?

我期待在单个进程多线程应用程序上使用POSIX消息队列.mqueues将用于在线程之间共享数据.

我对它们在Linux内核中的工作方式感到有些困惑.是否所有消息都通过内核空间然后返回到接收上的用户空间?又来自用户空间线程,我做一个mq_send,消息最终在内核空间中,然后在接收时,它是从内核空间获取消息的另一个系统调用.如果是这样,对于高使用率的消息队列来说这不是非常低效吗?

linux posix message-queue

6
推荐指数
2
解决办法
3926
查看次数

Boost asio - 与不同服务器的多个客户端连接

我正在尝试使用async boost udp/tcp套接字操作来评估我的应用程序的同步.我一直试图找到一个类似于我的设计的例子,但没有找到任何让我相信我可能试图将异步操作放入我的设计的东西,即使它不是正确的路径.

我想连接到多个(读取:1-10之间)服务器并使用不同的协议与它们通信; 我有4-5个线程,它们产生的数据需要传递给这些服务器连接中的任何一个.

我当前的设计是同步的,io_service每个服务器连接线程使用一个对象,然后在生成线程和每个连接线程之间使用线程安全队列.

这种设计在吞吐量性能方面似乎不具备可扩展性,这是我想要最大化的.

是否有任何示例可以为不同的服务器模式提供多个连接?

c++ boost-asio

6
推荐指数
1
解决办法
5700
查看次数

带有守护进程的 Linux IPC 多个客户端

这真的很基本,但我现在正在空白。

我有一个守护进程,并希望有多个客户端能够与之交谈。我希望客户端能够启动然后使用共享库,本质上是向守护进程“注册”。守护进程会为这个新客户端产生一个线程,并在客户端和新线程之间提供一个通信管道。

我正在考虑将 unix 数据报套接字作为所有客户端最初使用的“注册通道”,然后切换到特定于客户端的通道,但随后无法弄清楚如何为新的数据报套接字创建唯一名称而不预先设置它们.

  • 服务器和客户端在同一台机器上,更喜欢使用数据报套接字,而不必处理将流分解为数据包的问题。
  • 将来回发送(非常)高速率的小消息。

linux ipc unix-socket

5
推荐指数
0
解决办法
4096
查看次数

使用 dataclasses.MISSING 作为 Python 数据类的可选参数值?

我想让set参数可选,但仍然允许None为有效值。根据文档,它建议dataclasses.MISSING可以使用默认值来帮助实现这一点。

如上所示,MISSINGvalue是一个哨兵对象,用于检测用户是否提供了某些参数。使用此标记是因为None它对于某些具有不同含义的参数来说是有效值。任何代码都不应直接使用该MISSING值。

但通过如下使用:

import dataclasses
from dataclasses import dataclass, field

@dataclass
class Var:
    get: list
    set: list = dataclasses.MISSING

    def __post_init__(self):
        if self.set is dataclasses.MISSING:
            self.set = self.get

 print(Var(get=['Title']))  
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Traceback (most recent call last):
File "main.py", line 31, in <module>
print(Var(get=['Title']))
TypeError: __init__() missing 1 required positional argument: 'set'
Run Code Online (Sandbox Code Playgroud)

python python-dataclasses

4
推荐指数
1
解决办法
4971
查看次数

C++如何获得返回引用并将refence保存为函数中的局部变量?

我在一个类中有一个函数,它返回对成员变量的引用.

std::vector<uint8> & getBuffer() const
{
   return m_myBuffer;
}
Run Code Online (Sandbox Code Playgroud)

现在在另一个类中说我称之为这个方法:

int someFunction()
{
   std::vector<uint8> myFileBuffer = myFile.getBuffer();
}
Run Code Online (Sandbox Code Playgroud)

这一行调用vector的拷贝构造函数,使我成为一个本地缓冲区.我不想要这个,我怎样才能设置myFileBuffer来引用myFile.getBuffer().

我知道我可以通过指针做到这一点但是如果有可能的话想要使用引用.

谢谢.

c++ pointers reference

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