Unix GNU并行在下面的情况下非常慢

Unix GNU并行在下面的情况下非常慢,unix,redhat,gnu-parallel,Unix,Redhat,Gnu Parallel,Unix大师 这是我的要求 查找文件列表并使用iconv将编码转换为UTF-8 例如:FILE_LIST=abcfilename1 abcfilename2 abcfilename3 abcfilename4 注意:文件名可以是任何内容 Code in Loop: for f in $FILE_LIST; do iconv -f ISO-8859-1 -t utf-8 $f_$DATE.txt > $f_$DATE.utf8 mv $f_$DATE.utf8 $f_$DATE.txt do

Unix大师

这是我的要求

查找文件列表并使用iconv将编码转换为UTF-8

例如:FILE_LIST=abcfilename1 abcfilename2 abcfilename3 abcfilename4

注意:文件名可以是任何内容

Code in Loop:
for f in $FILE_LIST; do
iconv -f ISO-8859-1 -t utf-8 $f_$DATE.txt > $f_$DATE.utf8
mv $f_$DATE.utf8 $f_$DATE.txt
done
此代码等待每个文件转换。要花很多时间才能完成。当时只使用单线程/cpu

Created Code with multiple background sessions:
for f in $FILE_LIST; do
iconv -f ISO-8859-1 -t utf-8 $f_$DATE.txt > $f_$DATE.utf8 &
done
wait

for f in $FILE_LIST; do
mv $f_$DATE.utf8 $f_$DATE.txt &
done
wait
这将创建利用多个进程的多个后台会话。每个进程使用单线程/cpu。但是如果文件大小超过2GB,单线程利用率就不够快

遇到了GNU并行,它利用多线程/CPU。不确定如何根据上述场景列出或查找文件并使用iconv。我的主要目标是以更少的消耗时间最大限度地利用资源

尝试了大小为2GB的iconv

考虑使用GNU并行来利用多个CPU并查看性能。运行时使用了多个内核

GNU并行:

time find . -name 'filename.txt' | parallel -X iconv -f ISO-8859-1 -t UTF-8 {} \> {}.converted

real    0m14.58s
user    0m23.27s
sys     0m5.38s
顺序:

time iconv -f ISO-8859-1 -t utf-8 filename.txt > filename.txt.utf8

real    0m6.49s
user    0m5.43s
sys     0m1.07s
我发现,顺序计时比并行计时快得多。我在并行命令中遗漏了什么吗

请提出建议,如何实现此场景


谢谢

嗯?您只在一个文件上运行
iconv
——GNU Parallel用于一次运行多个进程,而不仅仅是一个进程。还有,为什么要运行
find
来查找单个文件?难道你不知道你的文件在哪里吗?是的,我知道。Donno正确的语法是的。如果文件大小很大,只想知道cpu是如何利用的。这是我的要求。我有一个变量中的文件列表。例如:abcfilename1abcfilename2。需要在特定目录中找到这些文件名(filelist)和附加日期(abc*_date.txt),并将其保存。请帮助我,如果可以完成。现在,我在文件列表中使用for循环,并在每个文件上使用iconv。iconv-f ISO-8859-1-t utf-8 filename.txt>filename.txt.utf8&。这将创建多个会话。但是如果文件大小很大,则需要等待很长时间才能完成。我希望这些命令能够最大限度地利用可用资源。请单击问题下方的
编辑
,并在此处而不是在评论中明确说明您的问题。如果您有数据文件,请显示它如果您在变量中有文件列表,请显示它。如果您有一个
for
循环,其中包含一些命令,请显示它。