멀티스레딩을 사용하여 파일을 여러 파일로 분할하는 방법은 무엇입니까?

멀티스레딩을 사용하여 파일을 여러 파일로 분할하는 방법은 무엇입니까?

그래서 100GB의 텍스트 파일이 있고 이를 10000개의 파일로 분할하고 싶습니다. 나는 다음과 같은 작업을 수행하기 위해 비슷한 것을 사용했습니다.

split -l <number of lines> -d --additional-suffix=.txt bigfile small_files_prefix

그런데 이걸로 하려고 했더니 시스템을 모니터링하다가 메모리나 CPU를 많이 사용하지 않는다는 걸 깨달았고, 그래서 그냥 하나의 스레드로 파일을 처음부터 끝까지 읽는다는 걸 깨달았습니다.

여러 스레드를 사용하여 이러한 작업을 수행할 수 있는 낮은 수준(또는 매우 높은 성능) 도구가 있습니까?

나는 필요할 때 파일을 복사하고 더 빠르면 멀티 코어를 활용하는 것을 선호합니다(그렇지 않을 것 같습니다!).

답변1

SSD를 사용하더라도 파일 분할의 병목 현상은 I/O입니다. 이를 위해 여러 프로세스/스레드를 사용하면 성능이 향상되지 않으며 일반적으로 속도가 훨씬 느려집니다.

또한 개행 문자로만 분할하려는 경우 각 스레드가 어디에서 어디로 복사되어야 하는지 미리 명확하지 않습니다. 이를 위해 특별한 도구를 작성해야 할 수도 있습니다.

분할 및 압축과 같은 다른 작업이 필요한 경우 상황은 다를 수 있습니다. 이 경우 다중 코어를 사용하는 것이 도움이 될 수 있지만 I/O는 병목 현상이 아닙니다(드라이브 및 CPU 속도에 따라 다름).

관련 정보