TIL 11/18

드립이 블로그·2022년 11월 18일
0

TIL

목록 보기
14/80

오늘 튜터님께서 가볍게 자바를 이용한 문제를 내주셨다.
계산 기능을 만드는 것이었는데, 빼기 기능은 쉽게 만들었다.
그런데 범위를 제한하는 것과, 홀짝 판별하는 기능을 만들지 못하였다.
홀짝을 판별하는 것은, 기능 자체는 어떻게 만드는 줄 알았는데, 사용을 못했다.
아마 파이썬이었으면 쉽게 만들었을 것 같은데 자바여서 못한 것 같다.
파이썬을 더 많이 본 것도 있고, 여태까지 문제를 파이썬으로 밖에 풀어보지 못했던 것도 있는 것 같다.
빨리 자바에 조금 더 익숙해질 필요가 있다고 느꼈다.

이후 저녁때는 튜터님의 CS특강을 들었다.
특강 내용은 프로세스와 스레드, 비동기에 관한 내용이었다.

프로세스

메모리에 적재되어 실행되고있는 프로그램의 인스턴스이다.
인스턴스란, 설계뙨 것을 바탕으로 구현된 구체적 실체이다.
프로세스는 운영체제로부터 시스템 자원을 할당받는 작업의 단위이다.
여기서 말하는 자원은 시간과 메모리 영역을 뜻한다.

프로세스는 독립된 메모리를 할당 받는다.
프로세스는 메모리 관리를 위해 프로세스 주소 공간이라는 구조로 관리를 한다.
프로세스 주소 공간은 Code, Data, Stack, Heap으로 구성된다.
Code: 코드 자체를 구성하는 메모리의 영역이다.
Data: 전역 변수와 정적 변수등의 데이터를 저장하는 영역이다.
Stack: 지역함수, 함수 매개변수, 리턴 값 등의 데이터를 저장하는 영역이다.
Heap: 동적 할당 시에 사용된다.
기본적으로 프로세스는, 프로세스마다 최소 1개의 스레드를 가진다. 이를 메인 스레드 라고 한다.

스레드

스레드는 프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위이다.
스레드는 Code,Data,Heap 영역은 다른 스레드와 공유하고, Stack은 따로 할당을 받는다.
프로세스와 프로세스 내의 다른 스레드는 자원과 공간을 공유하며 사용한다.

멀티 프로세스

멀티 프로세스는 하나의 프로그램을 여러 프로세스로 구성하여 하나의 작업을 각 프로세스가 처리하도록 하는 것이다.
멀티 프로세스를 사용하면 자식 프로세스 중 하나에 문제가 발생하면, 그 자식 프로세스 이상으로 다른 영향이 확산되지 않는다.
Context Switrching(문맥 교환)시 오버헤드가 일어날 수 있다.

멀티 스레드

멀티 스레드는 하나의 프로그램을 여러 개의 스레드로 구성하고, 각 스레드를 하나의 작업을 처리하도록 하는 것이다.
이는 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어든다는 장점이 있다.
또한 Context Switrching시에 멀티 프로세스에 비해 비용이 적고 더 빠르다.
하지만 서로 다른 스레드가 Data,Heap 영역 등을 공유하기 때문에 다른 스레드에서 사용중인 변수 등에 접근하게되면, 엉뚱한 값을 읽어 올 수 있다.
그리고 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 받는다는 점도 단점으로 꼽힌다.

동기 비동기

동기와 비동기는 함수 A와 B를 호출 할때, 이전 함수의 작업 완료 여부를 신경 쓰는가 쓰지 않는가에 따라 나뉘게 된다.
동기는 함수 A,B를 호출 할 때, A가 B의 리턴값을 계속 확인한다.
비동기는 함수 A,B를 호출 할 때, A가 B의 작업 완료 여부는 신경 쓰지 않는다.

결국 비동기를 사용하는 이유는 보다 효율적으로 자원을 사용하기 위함이다.

CS는 언제 들어도 이해가 될것같으면서도 안되는 그런 느낌이다.
조금만 들으면 이해가 완전히 되는데, 조금만 깊게 들어가면 바로 이해 가능한 영역을 벗어나는 느낌이다.
자바는 객체지향이 가장 중요하다고 하는데, 이 객체지향에 대해서 아직도 알쏭달쏭 하다는 느낌이 강하다. 하루 빨리라도, 자바에 익숙해졌으면 좋겠다.

0개의 댓글