스레드는 프로세스내에서 실행되는 흐름이라 사전적 정의가 나온다. 프로세스가 공장이라면 스레드는 일꾼이다 프로세스의 자원을 할당받아 실행하는 단위이다
스레드는 프로세스 내에서 Stack은 따로
할당받지만 Heap, Data , Code의 영역은 공유한다 각 스레드 들은 공통의 힙 메모리를 읽을 수 있다.
자바의 스레드는 jvm이 운영체제 역할을 한다. 자바는 프로세스가 존재하지 않고 스레드만 존재.
멀티 프로세스 방식과 멀티 스레드 방식 차이
이렇게 본다면 멀티 프로세스 보다는 멀티 스레드의 이점이 훨씬 커보인다. 자원의 소모성도 그렇고 하지만 멀티 스레드에는 치명적인 단점이있다.
멀티 스레드의 단점 다중의 스레드중 한 스레드에 치명적인 문제가 생기면 프로세스 전체에 영향이 갈수있다.
자원을 공유하기 때문에 경쟁상태(레이스 컨디션) 에 놓일 가능성이있고, 동기화 작업이 필요(줄을 세운다)하다. 하지만 이떄문에
교착 상태(데드락)이 생길 수 있다.
그러므로 과도한 lock은 자제한다 공유 자원이 아닌부분에는 동기화 처리가 불필요하다.
즉, 동기화 처리가 필요한 부분에만 synchronized 처리하자
데드락 승려와 젓가락을 기억하자 스레드가 자원을 얻지 못해 굶어죽는다.
메인 스레드 메인메서드를 실행하는 스레드 참고자료 : https://developer.mozilla.org/en-US/docs/Glossary/Main_thread
문맥 교환지금까지 미션을 하면서 프로세스의 준비ready, 실행running, 대기waiting 상태를 가지며 스케쥴링 하는 과정을 봤다. 시스템에서 이러한 3가지
상태뿐 아니라 다양한 종류의 이벤트가 있는데 이것을 인터럽트라한다.
시스템콜은 프로그램이 os커널이 제공하는 서비스를 이용하고 싶을때 java나 c로 작성된 프로그램은 직접 시스템 호출을 사용할 수 없기 때문에
고급 API를 통해 시스템 호출에 접근하게 하는 방법이다. 이것은 사실 우리가 사용하는 고수준언어가 간접적으로 이런한 api를 매핑하고있어
시스템콜을 간접적으로 사용한다. 즉 각 언어들은 각자의 특색에 맞게 시스템콜을 간접적으로 사용한다. 자바에서 스레드 인스턴스를 생성하고
실행하면 native한메서드가 실행되는데 이것은 os의 메서드이다 이런식으로 간접적으로 시스템콜을 사용.
시스템콜의 예시 : 프로세스/스레드, 파일, i/o 관련, 소켓관련