在 pthread 中运行 shell 命令的良好和优化方法是什么?
What is a good and optimized way to run shell command in a pthread?
基本上,我想使用 gzip 压缩 pthread 线程中的文件。 在谷歌上弹出的第一个解决方案是调用system()。
stackoverflow社区有什么建议?
-
我可以在线程中使用 system() 吗?
-
还是我自己应该在 pthread 中分叉和执行?但是由于 pthread 是一个线程,是否建议在 pthread 线程中做一个 fork() 和 exec()?
-
或者有什么比上述更好的方法?
-
你不应该为此使用
system
,但不是因为它很贵。 (对于任何值得费心压缩的文件,相对于压缩本身的成本,调用后台 gzip 压缩的任何技术的开销都可以忽略不计。 你不应该使用system
的原因是,system
调用一个shell,这意味着你必须担心引用参数。 如果您改用fork
和execvp
,则不必担心引用任何内容。
与 fork
和wait
与线程混合相关的问题是真实的,但它们是可以处理的。 如果您的操作系统有posix_spawn
,它将为您解决其中一些问题。 我通常不建议posix_spawn
因为使用它的代码通常比使用fork
的代码更难维护,但对于此应用程序,它应该没问题。 我无法将fork
和wait
与线程混合到此答案框中的综合指南。您应该考虑的另一种方法是使用 zlib 压缩线程中等待
gzip
进程的数据。 这避免了fork
和wait
与线程混合的问题,但它会向程序添加库依赖项,这可能不如依赖外部gzip
可执行文件方便。
从另一个线程中的调用开始system
并且仅在需要时增加复杂性。
执行fork
/exec
或使用zip
库的额外复杂性仅在由于某种原因system
不足时才值得付出努力(即您希望将子进程的stdin
和stdout
重定向到父进程中,或者您想压缩内存中的文件以通过网络发送它而不写入新文件)。
- 找不到使保证返回值优化工作的方法
- 根据 C++ 中的属性对对象类进行分区的优化方法
- 在调试配置中仅优化单个方法
- C++虚拟方法,不需要"this"指针 - 优化
- 如何优化C Parquet deadBatch方法
- 编译器可以优化方法调用吗?
- 在 pthread 中运行 shell 命令的良好和优化方法是什么?
- 内联类方法的寄存器优化不足
- C++是检查多维数组中匹配项的最佳优化方法
- GCC可以优化具有编译时常量变量的类的方法吗
- 如何告诉编译器不要在 /ob1 优化下内联在类定义中定义的方法
- 编译器添加的优化导致"final"方法的不同行为
- 如果从动态分配的对象调用方法,是否可以以某种方式内联(编译器优化)
- 虚拟方法优化
- 优化VS2010 c++(多线程)中的方法调用
- 了解工厂方法和静态变量赋值的返回值优化 (Visual Studio)
- 分形编程-任何优化此代码以实现实时渲染的方法
- 有没有一种方法可以关闭C++和Rust编译中的循环优化
- 有没有一种方法可以优化这个DP程序中的空间
- 有没有一种更快的方法或优化我可以应用到我的即兴内存池