Post

운영체제 (8) - process

링크를 참조해주세요!

threading threading threading -> Implicit Threading

병렬성과 동시성을 향상시키기 위해, 스레딩 기법의 인기가 점점 늘어났습니다. 하지만 이는 공유 자원에 대한 문제를 야기시킵니다. 따라서, 개발자에게 명시적으로 thread에 대한 책임을 지는 것이 아닌, 컴파일러와 런타임 라이브러리에 위임하여 좀 더 안정적인 스레딩을 하는 것이 목적입니다. 이를 암묵적 스레딩이라고 부릅니다.

thread pool

암묵적 스레딩을 하기 위한 첫 번째 방법입니다. pool은 “모이는 곳”을 지칭합니다. 즉 스레드들이 모이는 곳입니다. 이는 보통, 서버에서 많이 사용됩니다. 왜냐하면, 대규모 사용자들을 확보한 서버에서는 순간적으로 많은 요청이 활성화 될 때가 있습니다. 예를 들어, 콘서트 티켓 예약 등..입니다. 여기서 각 요청마다 thread를 만들어서 병렬적으로 처리한다면, 이는 메모리 초과로 이어질 가능성이 많습니다. 따라서, 미리 스레드들을 저장해둔 pool들을 만들고, 미리 만들어진 스레드들을 활용하여 요청을 병렬적으로 처리합니다. 만약 스레드 풀에 스레드가 없는 경우, 요청은 대기열에서 기다립니다. 아주 직관적입니다.

Java에서 Executors 객체의 newCachedThreadPool, newFixedThreadPool, newSingleThreadExecutor등의 method로 구현됩니다.

Java의 thread가 참 threading을 잘 지원하는 것 같습니다.

Fork-Join Parallelism

thread가 fork해서 하위 thread를 만들고, 마지막에 join하는 방법입니다.

OpenMP

코어의 수만큼 스레드를 구현합니다. 이는 공유 메모리 환경 병렬적 프로그래밍을 하도록 지원합니다.

Grand Central Dispatch

TBB 등의 방법이 있습니다..

Threading Issue

  1. 만약 multithread에서 하나의 thread가 fork하면 새로운 프로세스 생기는 것은 ok. 근데 모든 스레드도 복제 해야해?
  2. exec()하면 프로세스 실행하는 것 알겠어. 덮는데, 모든 스레드 다 덮어?

image

fork후 exec하면 … exec에서 지정한 프로그램이 모든 메모리 영역 다 대체할 것임.. 호출한 스레드만 복제함. 다 사라질 것이니까 fork후 exec 안하면 모든 스레드 복제

https://howudong.tistory.com/290 참고하자!

This post is licensed under CC BY 4.0 by the author.