Thread

  • It
  • August 29, 2019

쓰레드 란?

쓰레드란 cpu 이용의 기본적인 단위이다. 쓰레드 ID, 프로그램 카운터, 레지스터 셋, 그리고 스택으로 구성된다.

쓰레드가 다른 쓰레드와 같이 속하게 되면 정보를 공유하는데 이때 공유하는 정보는 코드 섹션, 데이터 섹션, 그리고 다른 OS 자원 (오픈 파일, 신호(?)이다).
반면에 기존의 전통 프로세스 (or heavyweight )는 하나의 콘트롤 쓰레드를 소유하는 차이점이 있다. \ 만약 프로세스에 여러 콘트롤 쓰레드를 가지고 있다면 같은 시간에 한 업무를 하는 것보다 더 나은 퍼포먼스를 구사한다.


Motivation (?)

현대 컴퓨터에서 실행하는 대부분의 응용 프로그램은 멀티 쓰레드이다.
일반적으로 응용프로그램은 여러개의 조절 쓰레드로 별도의 프로세스를 구현한다.
예를 들어서 워드 프로세서는 그래픽 보여주는 쓰레드 하나, 유저로 부터 키스트로크 (컴퓨터 키보드에서 어떤 기능을 수하거나 해제하기 위해 키를 두드리거나 눌러서 작동시키는 행위) 반응하게 하는 다른 쓰레드 하나, 마지막으로 백그라운드에서 문법과 철자를 첨삭하는 세번째 쓰레드 이렇게 구현한다.

특정 상황에서는 여러개의 비슷한 작업을 위해 단일 응용프로그램을 요구할 수도 있다.
예를 든다면 한 웹 서버가 클라이언트 요청인 웹페이지들, 이미지들, 소리 등등 허락하는 것이다.
무튼 대부분의 os 커널들은 다중 쓰레드이다. 커널안에 여러 스레드를 실행하고 각 쓰레드는 주어진 특정 작업을 수행한다. 디바이스 관리나 메모리 관리, 미터럽트 처리(?) 등이 해당하는 예이다.
실제 사용하는 예를 든다면 솔라리스는 커널 안에 있는 쓰레드의 설정은 인터럽트 핸들링에 특화되어 있고, 리눅스는 시스템안에 있는 남은 메모리의 양을 관리하는 것으로 주로 사용한다.


이점

멀티 쓰레드 프로그래밍의 이점을 4가지 카테고리로 세분화 할수 있다.

  1. 민감도
    상호호환적인 어플리케이션을 다중 쓰레드하면 막히거나 긴 작업이어도 지속적인 실행을 할 수 있도록 해준다. 이것을 민감도가 향상 된다고 불리운다.
    이같은 품질은 유저 인터페이스를 설계할 때 유용하다.
    예를 든다면 유저가 버튼(결과가 오래 걸리는) 을 클릭하는 응용프로그램에 대해 고려 할 수있다.
    단일 쓰레트는 전부 실행이 완료 될때 까지 결과를 보여주지 않지만 분할 쓰레드 안에서는 완료하지 않아도 유저에게 진행을 하면서 결과를 보여준다.

  2. 자원 공유
    프로세스들은 메모리 공유나 메세지 전달 같이 기술을 통해서 자원 공유가 가능하다.
    코드와 데이터를 공유의 이점은 응용 프로그램에 같은 추소내에서 다른 여러 다른 활동의 쓰레드들을 가질수 있도록 한다.

  3. 경제적
    프로세스 생성을 위한 메모리와 자원 할당은 많은 비용을 요구한다.
    자신이 속한 프로세스의 자원을 공유하기 때문에 보다 경젝적인 생성과 상황 전환이 가능하다.
    대체적으로 프로세스를 생성하고 관리하는 것이 쓰레드를 생성하고 관리하는 것보다 더 소요 된다.

  4. 확장성 (Scalability)
    다중 쓰레드의 이점은 멀티 프로세서 아키텍쳐일때 더 커진다.
    단일 쓰레드 프로세스는 얼마나 많이 가능한지 고려하지 않고 오직 하나의 프로세서만 실행한다.

다중코어 프로그래밍. 컴퓨터 설계 역사 초기에 더 많은 컴퓨팅 퍼포먼스, 필요의 응답으로 싱글 CPU 에서 다중 CPU로 진화했다.
최근에는 비슷한 트렌드로 여러 컴퓨팅 코어를 단일 칩에 넣는 작업을 한다.
CPU 칩 전체를 나타내거나 또는 CPU 칩내를 나타내는 거에 따라 멀티코어나 멀티 프로세서 시스템이라고 부른다.(코어는 CPU 에서 가장 중요한 부품이라 생각하면 된다) 멀티쓰레드 프로그래밍은 다중 컴퓨팅 코어 사용을 더 효율적이고 통지성을 충가를 제공한다.
무선 병렬과 동시성 차이에 주목해야 한다. 하나 이상의 작업을 동시에 하면 병렬히고 동시성은 모든 작업을 진행 할 수 있도록 하나 미상의 작업의 지원하는 것 즉 번갈아가면서 하는 것이다. 병렬성 없이도 통시성은 가능함.

알마다의 법칙 병렬방식일때 코어를 추가하면 추가 할수록 더 빨라짐 A

speedup = 1=>(S+(1-5)/N)

Related Posts

온프레미스와 Azure의 VPN

온프레미스와 Azure VPN 연결 문제 관련해서 글을 남긴적이 있습니다. Azure에서 VPN 로그 보는 법 이번 글에서는 연결 문제 관련해서 좀 더 자세히 설명 드려 보겠습니다.

Read More

Athena에서 Cloud Trail 로그 보는 법과 S3 액세스 로그 보는 법

특정 IAM의 액세스키가 S3를 계속해서 이용하고 있는 것이 확인 한적이 있습니다.

Read More

traceroute와 ping 그리고 netstat

네크워크 문제시 원인 파악을 위해 사용하는 도구를 살펴보다가 좋은 블로그 글이 있어 번역 및 요약을 했다

Read More