그래서 100GB의 텍스트 파일이 있고 이를 10000개의 파일로 분할하고 싶습니다. 나는 다음과 같은 작업을 수행하기 위해 비슷한 것을 사용했습니다.
split -l <number of lines> -d --additional-suffix=.txt bigfile small_files_prefix
그런데 이걸로 하려고 했더니 시스템을 모니터링하다가 메모리나 CPU를 많이 사용하지 않는다는 걸 깨달았고, 그래서 그냥 하나의 스레드로 파일을 처음부터 끝까지 읽는다는 걸 깨달았습니다.
여러 스레드를 사용하여 이러한 작업을 수행할 수 있는 낮은 수준(또는 매우 높은 성능) 도구가 있습니까?
나는 필요할 때 파일을 복사하고 더 빠르면 멀티 코어를 활용하는 것을 선호합니다(그렇지 않을 것 같습니다!).
답변1
SSD를 사용하더라도 파일 분할의 병목 현상은 I/O입니다. 이를 위해 여러 프로세스/스레드를 사용하면 성능이 향상되지 않으며 일반적으로 속도가 훨씬 느려집니다.
또한 개행 문자로만 분할하려는 경우 각 스레드가 어디에서 어디로 복사되어야 하는지 미리 명확하지 않습니다. 이를 위해 특별한 도구를 작성해야 할 수도 있습니다.
분할 및 압축과 같은 다른 작업이 필요한 경우 상황은 다를 수 있습니다. 이 경우 다중 코어를 사용하는 것이 도움이 될 수 있지만 I/O는 병목 현상이 아닙니다(드라이브 및 CPU 속도에 따라 다름).