본문 바로가기

thread

(5)
[Java] 1. HTTP 웹 서버 구현 - 클라이언트 요청 처리 난 이전에 잠시나마 병특으로 시스템 엔진니어로 일하면서 Apache, Nginx, Tomcat를 설치하곤 했다. 이때는 설치 위주의 업무이기 때문에 소스코드을 들여다 볼일이 없었다. 그렇기에 소프트웨어 엔진니어 관점이 아니며 동작원리를 모른채로 물에 붕뜬 느낌이 많이 들었다. 소스코드 수준에서 알아야 비로써 이해가 되기때문에 직접 웹서버를 구현해볼려고한다. HTTP를 지원하는 간단한 웹서버를 단계적으로 발전시켜나갈 생각이다. 이 글에서는 HTTP 웹서버 구현 중 클라이언트의 요청을 처리하는 기능만 구현해볼것이다. HTTP 웹 서버 구현 사항 및 주요 기술HTTP 웹 서버 구현할 사항Java로 HTTP 웹서버 구현클라이언트 요청에 대해 "Hello Client!" 를 응답웹서버 동작에 대한 간단 로깅HTT..
[Java] Single Thread와 Multi Thread Multi Threading 개념Multi Threading란Multi Threading은 하나의 프로세스 내에서 여러 스레드가 동시에 작업을 수행하는 것이다. 그러나 Multi Threading에서 스레드들은 번갈아가면서 실행되는 경우가 더 일반적이다. 보통 스레드의 수는 언제나 코어의 개수보다 훨씬 많은 환경이기 때문이다. 그래서 프로세스의 성능이 단순히 스레드의 개수에 비례하는 것이 아니다. 경우에 따라 하나의 스레드를 가진 프로세스 보다 두 개의 스레드를 가진 프로세스가 오히려 더 낮을 성능을 보일수도 있다. 물론, CPU 코어의 개수에 따라 Multi Threading은 병렬로 처리될수 있다. CPU 코어 개수가 실행되는 스레드 개수 이하일떄는 말이다. 실제로 CPU의 코어에서는 한번에 하나의 ..
[Java] Thread 구현과 실행 Thread 구현Thread 구현스레드를 구현하는 방법은 Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하는 방법 두가지가 있다. Thread 클래스를 상속받으면 다른 클래스를 상속받지 못하기 때문에 Runnable 인터페이스를 구현하는 방법이 일반적이다. Runnable 인터페이스를 구현한 다른 클래스의 인스턴스를 참조할수 있기 때문에 변경에 용이하기도 하다. Runnable 인터페이스는 오로지 run()만 정의되어 있는 간단한 인터페이스이다. run() 메서드의 구현부만 작성해주면 되는것이다. 위의 두 가지 방법 중에서 어떤 것을 선택할지라도, 스레드를 구현한다는 것은 run() 메서드의 구현부의 로직만 작성하면된다. 그러나 Thread 클래스를 상속받은 경우와 Runnable..
[Linux] Multi Tasking와 Multi Processing Multi Tasking단일 프로그램 실행예를 들어, 연산을 처리하는 CPU 코어를 하나라고 가정한다. 이때, 음악 프로그램으로 노래를 들으면서 워드 프로그램을 사용하면 어떻게 되나? 음악 프로그램을 종료된 이후에 워드 프로그램으로 문서 작업을 할수 있다. 프로그램의 실행은 프로그램을 구성하는 코드를 순서대로 CPU가 연산하는 것이다. 앞서 가정했듯이 CPU 코어가 하나라면, 한번에 하나의 프로그램의 코드를 실행할수 있다.  이러한 문제점을 해결하기 위해서, 하나의 CPU 코어로 여러 프로그램들을 동시에 실행하는 multi tasking 기술이 등장했다. Multi Tasking이란?컴퓨터 시스템에서 하나의 코어로 동시에 여러 작업(프로그램)을 수행하는 능력을 Multi Tasking이라 한다. 다만,..
[Java] Process와 Thread Process프로세스란?프로세스를 간단히 말하면 프로그램이 실행된것이다. 프로그램은 실행하기전에는 단순히 파일에 불과하다. 그러나 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아서 프로세스가 된다. 운영체제의 각 프로세스는 독립적인 메모리 공간을 갖고 있다. 이렇게 운영체제에 의해 프로세스들은 각기 격리되어 관리되기 때문에 하나의 프로세스가 충돌해도 다른 프로세스에 영향을 끼치지 않는다.  프로세스의 메모리 영역code: 실행할 프로그램의 코드가 저장되는 영역data: static 변수와 global 변수가 저장되는 영역heap: 동적으로 할당되는 영역stack: 메서드 호출시 생성되는 지역변수, 매개변수와 반환주소가 저장되는 영역프로세스의 역할프로세스는 메모리 공간, 파일 핸들, ..