text는 코드 영역이라고도 불린다.
프로세스는 PCB로 관리한다.
쓰레드는 stack 영역은 공유하지 않는다.
구글 크롬은 탭마다 다른 프로세스다.
[10분 테코톡] 👩💻👨💻 쪼밀리와 오구의 Process vs Thread
각 프로세스마다 PCB를 갖고 있기 때문에 비효율이 발생하게 된다.
이런 비효율을 해결할 수 있는 것이 쓰레드이다.
공유하는 부분이 있기 때문에 컨텍스트 스위치 오버헤드가 작다.
멀티코어라도 쓰레드 간에 context switch가 크게 발생하지 않는다.
https://valuefactory.tistory.com/510
[10분 테코톡] 🌷 코다의 Process vs Thread
프로그램은 실행되기 전에는 그저 코드파일일 뿐이다. 실행이되면 프로세스가 된다.
프로세스가 올라가면서 이런 것들이 생긴다.
다수의 프로세스를 실행하기 위해 시분할을 한다.
이렇게 프로세스들을 바꾸는 것이 컨텍스트 스위칭이다. 이것은 오버헤드가 크다. 그래서 등장한 것이 경량화된 프로세스 버전인 스레드이다.
스레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용한다.
공유되는 자원들 덕분에 컨텍스트 스위칭이 일어날때 캐쉬 적중률이 올라간다.
멀티 프로세스와 멀티 스레드 모두 한 어플리케이션에 대한 처리 방식이다. 단순히 여러 프로그램을 띄어놓는 것이라고 멀티 프로세스를 이해하면, 멀티스레드와 비교해서 이해하기 힘들다.
여러 사용자가 로그인을 요청하는 상황에서, 한 프로세스는 매번 하나의 로그인만 처리할 수 있기 때문에 동시에 처리할 수 없다. 그래서 부모 프로세스가 fork()를 해서 자식 프로세스를 여러개 만들어서 일을 처리하도록 한다. 이 때 자식 프로세스는 부모와 별개의 메모리 영역을 확보하게 된다.
반면 한 프로세스 내에서 구분지어진 실행 단위다. 프로세스 내에서 분리해서 여러 스레드로 나뉘어서 실행단위가 나뉘어지면 멀티스레드가 된다.
멀티스레드가 훨씬 좋아보이는데 왜 멀티프로세스를 이용할까? 긴밀하기 연결되어 있기 때문에 한 스레드가 문제가 생기면, 전체 프로세스에 문제가 생긴다.
멀티프로세스와 멀티스레드는 소프트웨어의 입장이고, 멀티코어는 하드웨어의 측면이다. 멀티코어와 관련된 키워드는 동시성과 병렬처리이다.
싱글코어를 가진 cpu가 실행단위를 처리할 때는 도잇에 진행하기 위해 빠른 텀으로 바꿔가며 실행한다. 이 개념이 동시성인데, 동시성은 짧은 순간에 cpu의 시간을 분할해서 동시에 하는 것처럼 보이게 한다.
멀티코어는 병렬처리, 즉 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한순가에 처리할 수 있게 해준 것이다.
리눅스 커널에서는 프로세스와 스레드를 동일하게 본다. 스레드는 사용자 스레드와 커널 스레드로 나뉜다. 리눅스에서는 일대일 관계인데, 사용자 스레드와 커널 스레드가 하나씩 매칭된다는 것이다.
사용자 레벨에서 보면 스레드 그룹 아이디가 pid로 보여지고, 커널 입장에서 보면 tid가 pid로 인식이 된다. 그래서 커널 입장에서는 각각이 다른 프로세스로 보인다.