我有一个问题要问。我有一个程序(进程 1),它有三个线程:
- 线程 1 连续运行,从锁套接字(AF_UNIX,NON_BLOCK)接收数据包并将它们复制到缓冲区。
- 线程 2 从缓冲区读取并将接收到的信息写入文件(磁盘)。
- 如果文件增长大于 5 MB,线程 3 会压缩文件
还有另一个进程(进程 2)不断向进程 1 读取的本地套接字发送数据包。每秒发送的数据包数(大约 100 字节)可高达每秒 3000-5000 个数据包。此设置在带有 ARM v9 控制器的嵌入式硬件上运行。
我必须确保没有任何数据包丢失并且所有数据包都写入磁盘。在当前的实现中,我时不时地从“sendto”(资源不可用)收到进程 2 的发送错误。
我禁用了所有锁和互斥锁以避免竞争条件(删除所有检查以防止读取时写入,反之亦然),即使这样我也会从“sendto”收到发送错误。
然后在第二步中,我禁用写入磁盘。现在,进程 1 的线程 1 可以尽可能快地从本地套接字读取,并且没有发送错误。我的猜测是,由于线程在没有超线程的 ARM 控制器上运行,因此在单个时间点只有一个线程在执行,并且操作系统正在处理线程的调度。
我的问题是,
是否可以并行运行三个线程(每个线程同时执行)?是否有 gcc 构造或编译器标志可以强制线程并行运行(在前台)?我可以更改程序中的某些内容以实现上述目的,而无需将功能拆分为多个程序并使用共享内存作为缓冲区吗?
问候, 阿努帕姆