두 개의 스레드를 실행했지만 모두 동일한 표준 출력으로 인쇄해야하는 경우 서로 기다려야합니까? 그래서 4 개의 쓰레드 모두에 쓸 내용이 있다면, 멈추고 stdout이 자유 롭기를 기다려서 작업에 착수 할 수 있어야한다고 말하십니까?파이썬 스레드가 표준 출력을 기다리고 있습니까?
3
A
답변
3
OS의 시스템 호출에서 깊이가 깊고 (깊이가 깊은 ...) 내려갑니다. 최신 OS에는 스레드 세이프 터미널 인쇄 루틴이 있습니다.이 루틴은 일반적으로 실제 장치 액세스 (또는 쓰는 대상과 설정이 무엇인지에 따라 버퍼)를 수행하는 중요한 섹션을 잠급니다. 그러나 이러한 대기는 매우 짧습니다. 이것이 여기서 다루는 IO이므로, 대기 시간은 실제 IO 실행에 비해 상대적으로 무시할 수 있습니다.
0
다릅니다. stdout이 파이프 인 경우, 각 파이프는 파이프가 작성 될 때 대체 할 수있는 4KB 버퍼를 확보합니다. 버퍼가 가득 차거나 flush()
을 호출하면 버퍼가 플러시됩니다.
stdout이 터미널 인 경우, 출력은 일반적으로 라인 버퍼링됩니다. 따라서 개행 문자를 인쇄 할 때까지 모든 쓰레드가 버퍼에 쓸 수 있습니다. 개행 문자가 작성되면 전체 버퍼가 콘솔에 덤프되고과 동시에 개행을 쓰는 다른 모든 스레드 이 대기해야합니다.
개개의 스레드가 개행을 쓰는 것보다 다른 것을하기 때문에, 각 스레드는 CPU를 얻습니다. 따라서 최악의 경우에도 혼잡은 아주 작아야합니다.
비록 한 가지 예외가 있습니다 : 많은 양의 데이터를 작성하거나 콘솔이 느린 경우 (직렬 포트를 사용하는 Linux 커널 디버그 콘솔과 같이). 콘솔이 데이터의 양에 대처할 수 없을 때 버퍼가 플러시 될 때까지 기다리는 새 라인 쓰기에 점점 많은 스레드가 멈추게됩니다.
관련 문제
- 1. 스레드가 Windows 양식 응답을 기다리고 있습니까?
- 2. 스레드가 이벤트를 기다리고 있는지 확인하는 방법은 무엇입니까?
- 3. 표준 입력과 표준 출력을 .Net에서 리디렉션
- 4. IE #가로드되기를 기다리고 있습니까?
- 5. 파이썬 표준 입력/출력을 C# 양식 응용 프로그램으로 리디렉션
- 6. 내 프로세스가 입력을 기다리고 있습니까?
- 7. 파이썬 하위 프로세스 모듈 : 하위 프로세스의 표준 출력을 반복합니다.
- 8. 파이썬 하위 프로세스; 표준 출력을 읽을 수 없습니다
- 9. 파이썬 용 표준 렉서/파서 도구가 있습니까?
- 10. 메인 스레드가 백그라운드 스레드에서 인터페이스 업데이트를 기다리고 있습니다.
- 11. 일하기 전에 posedge clk를 기다리고 있습니까? - 어떻게
- 12. 모든 스레드가 java를 사용하여 출력을 반환 할 때까지 스레드가 대기합니까?
- 13. 파이썬 표준 입력의 EOF
- 14. JBoss에서 "적절한 배포자를 기다리고 있습니까?"
- 15. tee 명령은 항상 EOF를 기다리고 있습니까?
- 16. 파이썬 표준 입력
- 17. 학습 파이썬 : 표준 출력
- 18. Must 표준 라이브러리 파이썬 초보자를위한 표준 라이브러리
- 19. 배포본에 파이썬 표준 라이브러리 포함하기
- 20. 표준 출력을 하프 아웃으로 보려면 어떻게해야합니까?
- 21. 리디렉션시 프로그램이 표준 출력을 플러시하도록 강요합니다.
- 22. C#으로 표준 입력과 출력을 연결하려면 어떻게해야합니까?
- 23. 클로저의 표준 출력을 어떻게 캡처 할 수 있습니까?
- 24. 표준 출력을 캡처하고 콘솔 창에 계속 표시하십시오.
- 25. 파이썬 하위 프로세스 숨기기 표준 출력과 대기는
- 26. 표준 파이썬 라이브러리와 유니 코드
- 27. 파이썬 표준 라이브러리의 악의적 코드
- 28. bash에서 표준 출력을 롤오버하는 방법은 무엇입니까?
- 29. Java 작업의 표준 출력을 보려면 어떻게합니까?
- 30. 파이프 하위 프로세스 표준 출력을 변수
나는 stdout이 각각의 쓰레드가 쓰고 계속할 수있는 버퍼를 가질 것이라고 상상한다. 버퍼에 쓰는 스레드가 많으면 버퍼 오버 플로우가 발생할 수 있다고 생각한다. 확실하지. 다른 사람들이 게시하는 것을보고 싶습니다. – Richard