> 백엔드 개발 > C++ > stdin에서 줄을 읽을 때 C의 `cin`이 Python보다 현저히 느린 이유는 무엇입니까?

stdin에서 줄을 읽을 때 C의 `cin`이 Python보다 현저히 느린 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-29 11:53:10
원래의
762명이 탐색했습니다.

Why is C  's `cin` Significantly Slower Than Python for Reading Lines from stdin?

C에서 stdin의 줄을 읽는 것이 Python보다 훨씬 느린 이유는 무엇입니까?

배경:

C를 사용하여 stdin에서 문자열 입력 줄을 읽는 것은 Python에 상응하는 것보다 훨씬 느릴 수 있습니다. 이러한 불일치는 더 많은 시스템 호출이 필요한 C의 기본 설정으로 인해 발생합니다.

입력 스트림의 기본 동작:

기본적으로 C 입력 스트림 cin은 다음과 동기화됩니다. 표준 C I/O 라이브러리(stdio). 이 동기화를 통해 입력이 버퍼링되지 않고 한 번에 한 문자씩 읽혀집니다. 이 동작은 cin 스트림과 stdio 함수 간의 충돌을 방지하지만 성능 저하도 발생시킵니다.

시스템 호출 사용:

cin이 stdio와 동기화되면, 각 문자 읽기는 비용이 많이 드는 작업인 시스템 호출을 트리거합니다. 이러한 오버헤드는 특히 대량의 데이터를 읽을 때 입력 프로세스 속도를 크게 저하시킵니다.

해결책:

C에서 줄 읽기 성능을 향상하려면 비활성화할 수 있습니다. cin과 stdio 간의 동기화. 이는 sync_with_stdio(false) 메소드를 호출하여 달성할 수 있습니다.

또는 getline 대신 fgets 함수를 사용하면 동기화 오버헤드도 우회됩니다.

성능 비교:

다음은 원래(동기화된) C 구현 간의 성능 비교입니다. 다양한 접근법:

Implementation Lines per Second
Python (default) 3,571,428
cin (default/naive) 819,672
cin (no sync) 12,500,000
fgets 14,285,714
wc (not a fair comparison) 54,644,808

결론:

cin과 stdio 간의 동기화를 비활성화하거나 fgets를 사용하면 C에서 줄 읽기 성능을 크게 향상시킬 수 있습니다. Python의 효율성과 비슷합니다.

위 내용은 stdin에서 줄을 읽을 때 C의 `cin`이 Python보다 현저히 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿