
I/O는 Input/Output의 약자로, 다른 컴퓨터나 주변 장치로부터 데이터를 전송하거나 받는 프로그램 및 장치를 가리킨다.
✅ 주로 다음과 같은 두 가지 형태의 I/O를 확인 할 수 있다!
Input(입력)
1.명사 (일·사업 등을 성공시키기 위한) 조언[시간/지식 등](의 제공), 투입
2.명사 컴퓨터 입력
3.동사 입력하다 (→output)output
1.명사 생산량, 산출량
2.명사 컴퓨터 (컴퓨터의) 출력 (→input)
3.동사 컴퓨터 출력해 내다 (→input)
보통 입력이란 명령을 실행하기 위해 필요한 데이터를 작성하거나 제공하는 행위이다. 컴퓨터에는 특정한 입력이 들어올 경우 실행되어야 하는 명령(프로그램)이 구현되어 있다.
입력된 데이터를 토대로 프로그램이 실행된 후 결과물을 산출하게 되고 이를 어떤 방식을 통해 사용자에게 전달하는 것이 출력이다.
즉, 일반적으로 입력과 출력은 사용자의 특성과 개성을 고려하여 구현된 일련의 과정(프로그램)을 사용자에게 맞춤화하는 데 관련된 요소이다.
처음에 I/O를 마주했을 때 혼동되었던 이유는 위와 같이 나는 입력과 출력을 각각 프로그램을 실행하는 데 필요한 요소와 프로그램의 결과물이라는 좁은 의미로만 받아들여졌기 때문이다.
컴퓨팅에서 입출력은 컴퓨터와 같은 정보 처리 시스템과 외부 세계(인간 또는 다른 정보 처리 시스템) 간의 통신이다. 입력은 시스템이 수신한 신호 또는 데이터이고 출력은 시스템에서 전송된 신호 또는 데이터이다. 이 용어는 작업의 일부로도 사용되기도 한다.(I/O는 입력 또는 출력 작업을 수행하는 것이다.)
나무위키
I/O는 컴퓨터와 외부 세계(다른 컴퓨터 또는 인간)가 통신하는 일련의 과정도 포함하는 것이었다.
🤔 그렇다면 외부 세계와 통신할 때 무엇을 Blocking(차단) 하거나 Non-Blocking(비차단)하는 것일까?
바로 해당 I/O를 호출한 스레드이다.
즉, 외부 세계에 통신을 요청한 후 결과를 제공 받을 때까지 호출한 스레드를 멈추게 한다면 Blocking, 멈추지 않고 다른 일을 하게 한다면 Non-Blocking인 것이다.
🤔 그럼 누가 차단할까?
운영체제이다. 외부 세계와 통신하는 것은 전부 커널이 주관하여 관리한다.
개발자가 개발할 때 워커 스레드를 통해 처리하도록 구현한다면 개발자가 처리한다고 할 수 있지만, 결국 시스템 콜 호출을 통해 커널 모드로 전환되어 구현된다!
개발자는 이러한 작업을 수행하는데 있어서는 일반적으로 운영 체제의 기능을 활용하게 되는 것이다. 즉, 운영체제의 스케쥴링에 따라 처리되는 것이다.