최근 인터뷰에서 가장 일반적인 질문은 IO 필드입니다. 그들 중 일부는 대답을 받았으며, 그들 중 일부는 잘 대답하지 않았습니다. 최근에, 나는 이러한 것들 중 일부에 대해 더 많이 배우기 시작했고 그것들을 요약하고 싶습니다.
프론트 포인트
1. 사용자 공간 시스템 공간
Linux 시스템은 프로세스를 사용자 공간 및 시스템 공간의 두 공간으로 나눕니다. 예를 들어, 우리의 일반 인코딩은 모든 사용자 공간입니다. 시스템 파일 복사와 같은 시스템 기능을 호출 해야하는 경우 시스템 구성 요소를 호출하고 커널 서비스를 얻고 작업을 완료해야합니다.
IO의 두 단계
IO 실행 프로세스는 두 단계로 나뉘어 사본을 실행할 준비가되기를 기다립니다.
대기 준비 : 우리는 IO 작업을 수행 할 때 데이터가 다른 응용 프로그램이나 네트워크에서 나올 수 있음을 알고 있습니다. 데이터가 없으면 운영 체제가 기다릴 것입니다. 현재 응용 프로그램은 복사를 기다릴 수도 있습니다. 데이터를 응용 프로그램 작업 공간에 복사하십시오.
차단 및 비 블로킹, 동기 및 비동기
먼저 동기화와 비동기식에 대해 이야기합시다. 가장 쉬운 것은 스레드 또는 프로세스가 IO를 완료하기 시작했는지 여부를 확인하는 것입니다. IO를 동기화 할 때 시스템은 중지하고 다른 일을하기 전에 끝날 때까지 기다립니다. 비동기 IO는 멀티 스레딩 메소드를 사용하여 새로운 스레드를 시작하여 다른 작업을 수행하고 알림을 기다릴 수 있습니다.
차단 및 비 블로킹에 대해 이야기합시다. 이 두 가지는 실제로 통화 결과를 기다릴 때 프로그램의 상태에 중점을 둡니다. 차단은이 결과를 얻을 때 전체 결과를 기다릴 때까지 매달릴 것임을 의미합니다. 비 블로킹은 프로세스가 결과를 얻을 수 없을 때 차단 스레드가 없음을 의미합니다. 이것은 약간 얽힌 것입니다. 일반적인 설명이 있습니다. 그것이 막히면, 나는 이것을 얻고 싶다. 획득 과정에서 CPU를 잃습니다. 결과까지 CPU를 얻지 못할 것입니다. 그러나 블로킹을하지 않으면 CPU를 계속 유지하고 여전히 확인할 수 있습니다.
여러 IO 모델
현재 5 가지 유형이 있습니다
차단 IO
가장 전통적인 IO 유형, 즉 읽기 및 쓰기가 차단됩니다.
비 블로킹 IO
사용자가 읽기를 시작하면 CPU가 손실되지 않으면 계속 확인합니다. 성공하지 못하면 오류가 반환됩니다. 성공적인 신호를 받으면 전체 결과를 얻기 위해 읽기 작업을 시작합니다.
멀티플렉싱 IO
이것이 Java Nio의 핵심입니다. 준비가되었는지 확인하기 위해 여러 소켓의 상태를 관리하는 스레드가 있습니다. 당신이 정말로 준비되어 있음을 알았을 때만 CPU에 전화하여 IO 작업을 수행 할 것입니다. 이것은 더 중요합니다
신호 드라이브 IO
덜 사용하고 무시하십시오
비동기 IO
실행할 스레드를 가져옵니다