사용자 수준 스레드 라이브러리를 사용하는 다중 스레드 프로세스가 해당 스레드 중 하나가 I/O를 기다리는 경우 차단되는 이유는 무엇입니까? 이것은 의미가 있지만 더 많이 생각하면 질문이 튀어 나옵니다. 사용자 수준의 스레드 라이브러리가 다른 스레드를 예약 할 수 있습니까?스레드가 여러 매핑에서 I/O를 기다리는 경우 프로세스가 차단되는 이유
0
A
답변
1
OS는 프로세스 (또는 작업) 만 예약 할 수 있으므로 프로그램 내의 스레드를 전혀 알지 못하므로 원하는대로 예약 할 수 없습니다. 프로세스의 일부 (여기서는 I/O로 인해 차단 된 스레드)가 I/O 작업을 위해 차단되면 os는 전체 프로세스를 일시 중단합니다. os는 프로세스 만 처리하기 때문에 (프로세스 내의 스레드가 아닌) . 많은 모델에서와 같이 단일 커널 만 존재하므로 스레드가 차단 된 프로세스는 차단 된 스레드가 다시 시작될 때까지 실행될 수 없습니다. 반면에 many to many 또는 one to one 모델에서는 각 커널이 코드 조각을 실행하고 다른 커널에서 차단 된 스레드를 알지 못합니다.
1
두 가지 유형의 스레드가 있습니다. OS 쓰레드, 그린 쓰레드 (당신이 말하는 것에 대한 것입니다.
OS 스레드는 운영 체제에 의해 예약되며 사용자가 의도적으로 동기화 할 항목 (예 : 세마포)을 사용하지 않는 한 다른 스레드는 차단하지 않습니다.
프로세스가 다른 실행 경로를 예약하는 녹색 스레드는 스케줄러가 똑똑하고 잠재적으로 모든 블로킹 함수 호출을 제공하여 스케줄링 기회로 사용하지 않는 한 차단됩니다. 이는 협업 멀티 태스킹과도 밀접한 관련이 있습니다.
그래서 대답은 '예'이지만, 그런 식으로 작성된 경우에만 가능합니다. 파이썬의 스레드는이 방법으로 작성되지 않았고, GIL을 읽었으므로 문제가 끝나지 않을 것입니다. 파이썬은 이제 이것을 고칠 수 있습니다.
관련 문제
- 1. IO를 기다리는 스레드가 CPU를 차단합니까?
- 2. 오픈 FIFO 일 때 프로세스가 차단되는 이유
- 3. 스레드가 ReceiveNextEvent에서 차단되는 중
- 4. JAI를 사용하여 URL에서 이미지를 가져 오는 동안 스레드가 차단되는 경우
- 5. 여러 스레드가 완료 될 때까지 기다리는 방법?
- 6. Countdown을 시도 할 때 동기화가 차단되는 이유
- 7. 프로세스가 명령을 기다리는 것
- 8. 프로세스가 온라인이되기를 기다리는 중
- 9. 스레드가 IO를 수행하는 동안 pthread_cancel이 스레드를 취소합니까?
- 10. 여러 스레드가 내 메모리를 먹는 이유
- 11. 왜 비동기 IO를 선호합니까?
- 12. 다른 스레드에서 뭔가를 실행할 때 UI 스레드가 차단되는 이유는 무엇입니까?
- 13. 응답을 기다리는 스레드가 죽는 중
- 14. 프로세스가 다른 프로세스를 기다리는 방법
- 15. Windows 서비스에서 스레드가 멈추기를 기다리는 중
- 16. 스레드가 필요한 이유
- 17. 좀비 프로세스가 필요없는 이유
- 18. 여러 객체를 기다리는 방법
- 19. 여러 스레드가 통지하는 조건 변수를 기다리는 올바른 방법
- 20. XML 매핑에서 여러 Excel 테이블
- 21. 여러 가지를 기다리는 방법
- 22. C# .NET에서 비동기 작업을 수행하면 반드시 차단되는 스레드가 만들어 집니까?
- 23. 하나의 프로세스가 완료되기를 기다리는 Powershell 명령
- 24. POSIX 스레드가 OpenMP보다 느린 이유
- 25. C# : 여러 스레드가 읽을 경우 ArrayList를 동기화해야합니까?
- 26. 하나의 스레드가 동시에 여러 메서드를 실행하는 경우
- 27. 프로세스/스레드가 사용자 입력을 기다리는 경우를 감지하는 방법
- 28. 다른 프로세스가 로컬 포트에서 청취하기를 기다리는 방법?
- 29. 스레드가 C#/Xamarin으로 끝날 때까지 기다리는 중
- 30. 세마포를 기다리는 스레드가 없는지 확인할 수 있습니까?
당신이 무엇을 요구하고 있는지 분명하지 않습니다. 특정 프로그래밍 언어에 대한 질문이 있으십니까? 특정 운영 체제? 특정 도서관? 예상대로 작동하지 않는 코드의 예가 있습니까? –
이 경우 OS가 스레딩을 인식하지 못하기 때문입니다. 사용자 수준 라이브러리가 다른 스레드를 예약하도록하려면 실행해야합니다. OS에 관한 한 I/O 요청으로 인해 프로세스가 차단됩니다. –
@jameslarge이 질문은 매우 광범위하며 특정 운영 체제 나 프로그래밍 언어와 관련이 없습니다. –