• Mindscape ๐Ÿ”ฅ
    • Playlist ๐ŸŽง
  • Algorithm

    • 1018๋ฒˆ: ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ
    • 1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ
    • Python ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํŒ
    • C++ std::vector ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ
    • Vim ์‚ฌ์šฉ ๋งค๋‰ด์–ผ
  • Ubuntu

    • ๋ฆฌ๋ˆ…์Šค ์šฐ๋ถ„ํˆฌ GRUB ํฐํŠธ ๋ณ€๊ฒฝ
    • ์šฐ๋ถ„ํˆฌ ์ด๋ฏธ์ง€ ๋น„๋””์˜ค ์ธ๋„ค์ผ(๋ฏธ๋ฆฌ๋ณด๊ธฐ) ์•ˆ ๋ณด์ž„ ๋ฌธ์ œ ํ•ด๊ฒฐ
    • Wine ํ™˜๊ฒฝ์—์„œ ์นด์นด์˜คํ†ก ์‹คํ–‰ ์‹œ explorer.exe ๋œจ์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฒ•
    • ์šฐ๋ถ„ํˆฌ Wine ์นด์นด์˜คํ†ก ์‚ฌ์ง„ ์ด๋ฏธ์ง€ ์Šคํฌ๋ฆฐ์ƒท ๋ถ™์—ฌ๋„ฃ๊ธฐ
    • Wine ์นด์นด์˜คํ†ก ์ด๋ชจ์ง€ ๊นจ์ง ๋ฌธ์ œ ํ•ด๊ฒฐ
    • Ubuntu ์œˆ๋„์šฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„๊ธฐ
  • Wellness

    • ์ฐจ์ „์žํ”ผ (Psyllium Husk)
    • ์—‘์ŠคํŠธ๋ผ ๋ฒ„์ง„ ์˜ฌ๋ฆฌ๋ธŒ์œ  (Extra Virgin Olive Oil)
    • ์ž๊ฐ€๋น„๊ฐ•์„ธ์ฒ™ (Nasal Irrigation)
    • QCY HT08 (MeloBuds Pro Plus)
    • ์ฝ˜์„œํƒ€ (Concerta)
    • ์ธ๋ฐ๋†€ (Inderal)
    • ์„คํŠธ๋ž„๋ฆฐ (Sertraline)
    • ๋ฉœ๋ผํ† ๋‹Œ (Melatonin)
    • ์น˜๊ฒฝ๋ถ€ ๋งˆ๋ชจ์ฆ
    • ๋ฐ”๋ฒจ ์Šค์ฟผํŠธ (Barbell Squat)
  • Humanities

    • Nordvik, Russia
    • North Sentinel Island
    • ๋กฑ๊ณ ๋กฑ๊ณ (Rongorongo)
    • ๋ฐ”๋กœํฌ ์Œ์•… (Baroque Music)
  • Design

    • ๊ตฌ๊ธ€์˜ ์•„์ด์ฝ˜ ๋Œ€๊ฐœํŽธ โ€” 6๋…„ ๋งŒ์˜ ์‹ค์ˆ˜ ์ธ์ •
    • ์ œ๋Ÿด๋“œ ์  ํƒ€ โ€” ๋Ÿญ์…”๋ฆฌ ์Šคํฌ์ธ  ์›Œ์น˜์˜ ์ฐฝ์‹œ์ž
    • ๋ฐ”์šฐํ•˜์šฐ์Šค โ€” ํ˜„๋Œ€ ๋””์ž์ธ์˜ ์›์ 
  • Brands

    • NOMOS Glashรผtte
    • Frรฉdรฉrique Constant
    • KZ (Knowledge Zenith)
    • ์—์ŠคํŠธ๋ผ (AESTURA)
    • JINHAO (้‡‘่ฑช)
    • Herman Miller
    • ๋ฐ์Šค์ปค (DESKER)
    • ๋ฌด์‹ ์‚ฌ ์Šคํƒ ๋‹ค๋“œ (Musinsa Standard)
  • Finance

    • ํ˜„๋Œ€์นด๋“œ ZERO โ€” Edition2 vs Edition3 ๋น„๊ต
    • ์‹ ํ•œ์นด๋“œ ์ฒ˜์Œ
    • S&P 500 ETF ํˆฌ์ž ๊ฐ€์ด๋“œ
    • ํŒŒํ‚นํ†ต์žฅ vs CMA ํ†ต์žฅ
    • ๋ฒ„ํฌ์…” ํ•ด์„œ์›จ์ด (Berkshire Hathaway)
    • ๋น„ํŠธ์ฝ”์ธ(Bitcoin)
  • Products

    • ์˜ค๋””์˜ค ์ธํ„ฐํŽ˜์ด์Šค (Audio Interface)
    • ์ฟ ๋ฃจํ† ๊ฐ€ (KURUTOGA)
    • CX31993 DAC ๋™๊ธ€
    • ํด๋ Œ์ง• ๋ฐ€ํฌ (Cleansing Milk)
    • ํ”ผ์ ฏ ํ† ์ด (Fidget Toy)
    • ThinkPad
  • Programming Languages

    • 8.0. Statement Level Control Structures
    • 8. Subprogram
    • 9. Implementing Subprogram
    • 10.1. Abstract Data Types and Encapsulation Constructs
    • 10.2. Support for Object Oriented Programming
    • 11. Concurrency
    • 12. FPL (1)
    • 13. FPL (2)
    • 14. Exception Handling and Event Handling
    • Final Exam

4. Threads

์ž‘์„ฑ 2026. 6. 12.ยท์ˆ˜์ • 2026. 6. 12.

๋‹ค๋ฃจ๋Š” ์ฃผ์ œ

  • A. ์Šค๋ ˆ๋“œ ๊ฐœ๋…
  • B. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๋ชจ๋ธ
  • C. ์Šค๋ ˆ๋”ฉ ๊ด€๋ จ ์ด์Šˆ
  • D. ์‚ฌ๋ก€

A. ์Šค๋ ˆ๋“œ ๊ฐœ๋…

๊ฐœ๋…

  • ์Šค๋ ˆ๋“œ๋Š” ํ”ํžˆ ๊ฒฝ๋Ÿ‰ ํ”„๋กœ์„ธ์Šค(lightweight process)๋ผ ๋ถˆ๋ฆผ
    • ์‹คํ–‰์˜ ๋‹จ์œ„ (์Šค์ผ€์ค„๋ง์˜ ๋‹จ์œ„)
    • ์ตœ์†Œํ•œ์˜ ์ž์›๋งŒ์„ ํ•„์š”๋กœ
    • ์ „ํ†ต์ ์ธ ํ”„๋กœ์„ธ์Šค๋Š” ์ค‘๋Ÿ‰ ํ”„๋กœ์„ธ์Šค(heavyweight process)๋ผ ๋ถˆ๋ฆผ

ํ”„๋กœ์„ธ์Šค vs. ์Šค๋ ˆ๋“œ

  • ํ”„๋กœ์„ธ์Šค
    • ์‹คํ–‰ ๋‹จ์œ„ (์Šค์ผ€์ค„๋ง ๋‹จ์œ„)
    • ์™„์ „ํ•œ ์ž์› ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ง
      • ์ฃผ์†Œ ๊ณต๊ฐ„๊ณผ ํ”„๋กœ์„ธ์„œ ์ปจํ…์ŠคํŠธ(context) ๋ณด์œ 
      • ์ž์›(ํŒŒ์ผ, I/O ์žฅ์น˜ ๋“ฑ)์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ ๋ณด์œ 
  • ์Šค๋ ˆ๋“œ
    • ์‹คํ–‰ ๋‹จ์œ„ (์Šค์ผ€์ค„๋ง ๋‹จ์œ„)
    • ์‹คํ–‰์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ์ž์›๋งŒ์„ ํ•„์š”๋กœ
      • private ์Šคํƒ(private stack) ๊ณต๊ฐ„๊ณผ ํ”„๋กœ์„ธ์„œ ์ปจํ…์ŠคํŠธ ๋ณด์œ 
      • ํ”„๋กœ์„ธ์Šค์˜ ๋‹ค๋ฅธ ์ž์›๋“ค์„ ๊ณต์œ 

๋‹จ์ผ ์Šค๋ ˆ๋“œ vs. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์Šค๋ ˆ๋“œ ์˜ˆ์ œ โ€“ ์ƒ์„ฑ๊ณผ ์ข…๋ฃŒ

#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5

void *PrintHello(void *threadid) {
    printf("\n%d: Hello World!\n", threadid);
    pthread_exit(NULL);
}

int main (int argc, char *argv[]) {
    pthread_t threads[NUM_THREADS];
    int rc, t;
    for(t=0; t < NUM_THREADS; t++){
        printf("Creating thread %d\n", t);
        rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
        if (rc){
            printf("ERROR; return code is %d\n", rc);
            exit(-1);
        }
    }
    pthread_exit(NULL);
}

int
pthread_create (pthread_t *thread_id,
                const pthread_attr_t *attr,
                void *(*thread_function)(void *),
                void *arg);
  • pthread_create ํ•จ์ˆ˜ ๋ถ„์„
  1. thread_id ์ธ์ž๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ ID๋ฅผ ๋ฐ˜ํ™˜
  2. attr ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์Šค๋ ˆ๋“œ ์†์„ฑ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋จ (๊ธฐ๋ณธ๊ฐ’์€ NULL)
  3. thread_func๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ์‹คํ–‰ํ•  C ๋ฃจํ‹ด์ž„
  4. arg๋ฅผ ํ†ตํ•ด start_routine์— ๋‹จ์ผ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Œ

Pthreads APIs

  • pthread_t pthread_self(): ์ž์‹ ์˜ ์Šค๋ ˆ๋“œ ID๋ฅผ ๊ฐ€์ ธ์˜ด
  • int pthread_equal(pthread_t t1, pthread_t t2): ๋‘ ์Šค๋ ˆ๋“œ ID๋ฅผ ๋น„๊ต
  • int pthread_join(pthread_t thread, void status_ptr): ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
  • int pthread_detach(pthread_t thread): ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ํ• ๋‹น๋œ ์ž์›์„ ์ฆ‰์‹œ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„ (๋ถ„๋ฆฌ๋œ ์Šค๋ ˆ๋“œ๋Š” join๋  ์ˆ˜ ์—†์Œ)

์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰ ํŠน์„ฑ

  • ์Šค๋ ˆ๋“œ๋Š” ์‹คํ–‰ ์ƒํƒœ(์‹คํ–‰ ์ค‘, ์ค€๋น„, ๋Œ€๊ธฐ)๋ฅผ ๊ฐ€์ง
  • ์Šค๋ ˆ๋“œ ๋ฌธ๋งฅ ๊ตํ™˜(context switching)์ด ํ•„์š”
  • ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„(์ฝ”๋“œ ๋ฐ ๋ฐ์ดํ„ฐ)๊ณผ ์ž์›์„ ๊ณต์œ 
  • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค ๋‚ด ๋‹ค๋ฅธ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธ ๊ฐ€๋Šฅ
  • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฐ ํŒŒ์ผ์€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Thread Private Data

  • ์Šคํƒ์— ์ €์žฅ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ์Šค๋ ˆ๋“œ private ๋ฐ์ดํ„ฐ์ž„
    • ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์—ญ์‹œ ์Šค๋ ˆ๋“œ private ๋ฐ์ดํ„ฐ์— ํ•ด๋‹น
      double func( double a )
      {
        double b;
      ...
      
  • ๋ณ€์ˆ˜ a์™€ b๋Š” ๊ฐ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด ๋…๋ฆฝ์ ์ž„

์Šค๋ ˆ๋“œ ๋กœ์ปฌ ๋ณ€์ˆ˜ (Thread Local Variables)

  • ๋ชจ๋“  ๋ฃจํ‹ด์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ „์—ญ ๋ฐ์ดํ„ฐ์ด๋‚˜, ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋…๋ฆฝ์ ์ธ ์‚ฌ๋ณธ๋งŒ์„ ๊ฐ€์ง
    __thread void * mydata;
    
    void * threadFunction( void * param )
    {
      mydata = param;
    ...
    
  • mydata ๋ณ€์ˆ˜๋Š” ์Šค๋ ˆ๋“œ์— ๋กœ์ปฌํ•˜๋ฏ€๋กœ, ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ

์ด์  Benefits

  • ์‘๋‹ต์„ฑ (Responsiveness)
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€๊ฐ€ ์ฐจ๋‹จ(block)๋˜์–ด๋„ ๊ณ„์† ์‹คํ–‰ ๊ฐ€๋Šฅ
  • ์ž์› ๊ณต์œ  (Resource sharing)
    • ๋ฉ”๋ชจ๋ฆฌ์™€ ์ž์›์„ ๊ณต์œ 
  • ๊ฒฝ์ œ์„ฑ (Economy)
    • ์ƒ์„ฑ ๋ฐ ๋ฌธ๋งฅ ๊ตํ™˜ ๋น„์šฉ์ด ์ €๋ ด
  • ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜ ํ™œ์šฉ
    • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋กœ ๋ณ‘๋ ฌ์„ฑ ์ฆ๋Œ€ ๊ฐ€๋Šฅ
  • ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ ์ œ๊ณต

์˜ˆ์‹œ: ์›น ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ

  • ๋””์ŠคํŒจ์ฒ˜ ์Šค๋ ˆ๋“œ(Dispatcher Thread): ์š”์ฒญ์„ ๋ฐ›์•„ ์ž‘์—… ์Šค๋ ˆ๋“œ์— ์ „๋‹ฌ
  • ์ž‘์—… ์Šค๋ ˆ๋“œ(Worker Thread): ์‹ค์ œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ(์บ์‹œ ํ™•์ธ, ๋””์Šคํฌ ์ฝ๊ธฐ ๋“ฑ)

Processes, Threads, and Tasks

  • ํƒœ์Šคํฌ์˜ ์šฉ์–ด์  ์ •์˜
    • ์šด์˜์ฒด์ œ์—์„œ ํ”ํžˆ ์‚ฌ์šฉ๋˜๋Š” ์ „๋ฌธ ์šฉ์–ด๋Š” ์•„๋‹˜
    • ํ•˜์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‹คํ–‰ ๋‹จ์œ„(unit of execution) ๋˜๋Š” ์Šค์ผ€์ค„๋ง ๋‹จ์œ„(unit of scheduling)๋ฅผ ์˜๋ฏธํ•˜๋Š” ์šฉ์–ด๋กœ "ํƒœ์Šคํฌ"๋ฅผ ์‚ฌ์šฉํ•จ
  • ์‚ฌ์šฉ ๋งฅ๋ฝ
    • ํ•˜์œ„ ์šด์˜์ฒด์ œ์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ์‚ฌ์šฉ๋จ
    • ์šด์˜์ฒด์ œ๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•  ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ๋ฅผ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์Œ
    • ์šด์˜์ฒด์ œ๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์Œ

B. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๋ชจ๋ธ

์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ (User Threads)

  • ์‚ฌ์šฉ์ž ์ˆ˜์ค€์˜ ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ๊ด€๋ฆฌ๋จ
    • ์ปค๋„์˜ ์ง€์› ์—†์ด ์šด์˜๋จ
  • ์žฅ์ : ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ๋น ๋ฆ„ (์ปค๋„ ๊ฐœ์ž… ์—†์Œ)
  • ๋‹จ์ : ์ปค๋„์ด ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์ผ ๊ฒฝ์šฐ, ํ•˜๋‚˜์˜ ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์Šคํ…œ ์ฝœ๋กœ ์ฐจ๋‹จ๋˜๋ฉด ํ”„๋กœ์„ธ์Šค ์ „์ฒด๊ฐ€ ์ฐจ๋‹จ๋จ
  • ์‚ฌ๋ก€: POSIX Pthreads, Mach C-threads

์ปค๋„ ์Šค๋ ˆ๋“œ (Kernel Threads)

  • ์ปค๋„์— ์˜ํ•ด ์ง์ ‘ ์ง€์›๋จ
  • ์ปค๋„์ด ์ปค๋„ ๊ณต๊ฐ„์—์„œ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ, ์Šค์ผ€์ค„๋ง, ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰
  • ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๋ณด๋‹ค ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ๋А๋ฆผ
  • ์‚ฌ๋ก€: Windows, Solaris, Linux ๋“ฑ

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๋ชจ๋ธ์˜ ์ข…๋ฅ˜

  • ๋‹ค๋Œ€์ผ(Many-to-One): ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ์— ๋งคํ•‘๋จ (์ปค๋„ ์Šค๋ ˆ๋“œ ๋ฏธ์ง€์› ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ)
  • ์ผ๋Œ€์ผ(One-to-One): ๊ฐ ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐœ๋ณ„ ์ปค๋„ ์Šค๋ ˆ๋“œ์— ๋งคํ•‘๋จ (Windows, OS/2 ๋“ฑ)
  • ๋‹ค๋Œ€๋‹ค(Many-to-Many): ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๊ฐ€ ๊ทธ๋ณด๋‹ค ์ ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ์— ๋งคํ•‘๋จ (Solaris 2 ๋“ฑ)

C. ์Šค๋ ˆ๋”ฉ ๊ด€๋ จ ์ด์Šˆ

fork() ์‹œ์Šคํ…œ ์ฝœ์˜ ์˜๋ฏธ

  • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ fork()๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€ ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌ
    • ์ƒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋ฅผ ๋ณต์ œ
    • ์ƒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ์ƒ์„ฑ๋จ
  • ๋งŽ์€ ์‹œ์Šคํ…œ์ด ๋‘ ๊ฐ€์ง€ ๋ณ€ํ˜•๋œ fork()๋ฅผ ๋ชจ๋‘ ์ œ๊ณตํ•˜์—ฌ ์ ˆ์ถฉ

๊ธฐํƒ€ ์‹œ์Šคํ…œ ์ฝœ ๊ด€๋ จ ์ด์Šˆ

  • ํ”„๋กœ์„ธ์Šค ๋‚ด ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ์ง‘ํ•ฉ์„ ๊ณต์œ 
  • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ํŒŒ์ผ์„ ๋‹ซ๋Š” ๋„์ค‘ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ์ƒํ™ฉ์— ๋Œ€ํ•œ ํŒŒ์ผ ์ž ๊ธˆ ํ”„๋กœํ† ์ฝœ์ด ํ•„์š”
  • ๊ณตํ†ต ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ 
  • mmap, brk์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•œ ๋™์‹œ ์ˆ˜์ • ์‹œ ์Šค๋ ˆ๋“œ ์•ˆ์ „(thread-safe)์„ ๋ณด์žฅํ•ด์•ผ

์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ (Stack Overflow)

  • UNIX ํ”„๋กœ์„ธ์Šค ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์‹œ ์ปค๋„์ด ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ž๋™ ํ™•์žฅ
  • ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ ์ปค๋„์ด ์‚ฌ์šฉ์ž ์Šคํƒ ์ •๋ณด๋ฅผ ์•Œ์ง€ ๋ชป
  • ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์Šคํƒ ๋์— ์“ฐ๊ธฐ ๋ฐฉ์ง€ ํŽ˜์ด์ง€๋ฅผ ํ• ๋‹นํ•˜์—ฌ ๋ณดํ˜ธ
  • ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ ์‹œ ๋ณดํ˜ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ปค๋„์ด SIGSEGV ์‹ ํ˜ธ๋ฅผ ํ•ด๋‹น ์Šค๋ ˆ๋“œ์— ๋ณด๋ƒ„

์Šค๋ ˆ๋“œ ํ’€ (Thread Pool)

  • ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ ๋ฏธ๋ฆฌ ์ผ์ • ์ˆ˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ’€์— ์ €์žฅ
  • ์š”์ฒญ ๋ฐœ์ƒ ์‹œ ํ’€์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์›Œ ํ• ๋‹นํ•˜๊ณ , ์ž‘์—… ์™„๋ฃŒ ํ›„ ๋‹ค์‹œ ํ’€๋กœ ๋ฐ˜ํ™˜
  • ์žฅ์ : ์ƒˆ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ๋ณด๋‹ค ์ฒ˜๋ฆฌ๊ฐ€ ๋น ๋ฅด๋ฉฐ, ์‹œ์Šคํ…œ์ด ์ง€์› ๊ฐ€๋Šฅํ•œ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Œ
  • ์›น ์„œ๋ฒ„ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์— ์œ ์šฉ

D. ์‚ฌ๋ก€

Solaris 2 ์Šค๋ ˆ๋“œ

  • ์ปค๋„ ๋ฐ ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ๋ชจ๋‘์—์„œ ์Šค๋ ˆ๋“œ ์ง€์›
  • ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ์™€ ์ปค๋„ ์Šค๋ ˆ๋“œ ์‚ฌ์ด์— ๊ฒฝ๋Ÿ‰ ํ”„๋กœ์„ธ์Šค(LWP)๊ฐ€ ์กด์žฌ
  • LWP๋Š” ์ปค๋„์ด ์ง€์›ํ•˜๋Š” ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ์ด๋ฉฐ, ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ LWP๋ฅผ ํฌํ•จ
  • ์ปค๋„ ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ
    • LWP์™€ ์—ฐ๊ฒฐ๋˜๊ฑฐ๋‚˜ ์ปค๋„ ์ž์ฒด ์ž‘์—…์„ ์œ„ํ•ด ์กด์žฌํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์œ ์ผํ•œ ์Šค์ผ€์ค„๋ง ๋Œ€์ƒ
  • ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ
    • ๋ฐ”์šด๋“œ(Bound): ํŠน์ • LWP์— ์˜๊ตฌ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋จ (๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•œ ์‹ค์‹œ๊ฐ„ ์•ฑ์šฉ)
    • ์–ธ๋ฐ”์šด๋“œ(Unbound): ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ, ๊ฐ€์šฉํ•œ LWP ํ’€์— ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ๋˜์–ด ์‹คํ–‰๋จ

Solaris Process

์ตœ๊ทผ ์ˆ˜์ •: 26. 6. 12. ์˜คํ›„ 3:28
Contributors: kmbzn, Claude Sonnet 4.6

BUILT WITH

CloudflareNode.jsGitHubGitVue.jsJavaScriptVSCodenpm

All trademarks and logos are property of their respective owners.
ยฉ 2026 kmbzn ยท MIT License