728x90
반응형

스레드 6

[msa-perf-lab] Python과 Go 비교: I/O & CPU Bound 작업에서의 동시성 차이 분석 - GIL, Gouroutine, M:N 스케줄링

MQ 비동기 도입 전/후 테스트를 진행하며, 파이썬의 I/O 작업 처리 방식에 궁금증이 생겼다. 1초가 걸리는 요청을 초당 100개씩 보냈는데도 1초마다 100개를 전부 응답했기 때문이다. 파이썬은 GIL 때문에 한번에 하나의 작업만 처리하는 걸로 알고 있었는데다가, 내가 비동기 처리를 하지 않았는데도 비동기처럼 동작하길래 무슨 원리인지 궁금해서 파 보았다. GIL(Global Interpreter Lock)GIL은 Global Interpreter Lock의 약자로서, 간단히 말하면 파이썬에서 하나의 프로세스(워커)가 동시에 하나의 CPU 작업만 실행하게 하는 제약조건이다. 이 제약 때문에 파이썬 코드는 언제나 동시에 단 한개만 실행된다. 그러나 이것이 싱글스레드로 동작한다는 말은 아니다. 필요에..

PintOS 프로젝트 2주차 [User Programs / System Call] (1)

95개의 테스트 케이스 중 15개를 실패한 코드입니다. 주의해서 참고하세요.pass tests/userprog/args-nonepass tests/userprog/args-singlepass tests/userprog/args-multiplepass tests/userprog/args-manypass tests/userprog/args-dbl-spacepass tests/userprog/haltpass tests/userprog/exitpass tests/userprog/create-normalpass tests/userprog/create-emptypass tests/userprog/create-nullpass tests/userprog/create-bad-ptrpass tests/userprog/cr..

PintOS 프로젝트 1주차 [Threads / Priority Donation]

이전 Priority Scheduling과 이어지는 글이다.이 글에서는 저번 글에 이어서, Priority Donation을 구현하는 것을 메인으로 다룬다.  thread.hstruct thread {    /* Owned by thread.c. */    tid_t tid;                          /* Thread identifier. */    enum thread_status status;          /* Thread state. */    char name[16];                      /* Name (for debugging purposes). */    int priority;                       /* Priority. */    ..

PintOS 프로젝트 1주차 [Threads / Priority Scheduling]

Priority Scheduling은 우선순위 스케줄링을 의미한다. Alarm Clock에서는 ready_list에 우선순위를 생각하지 않고 스레드를 삽입했고, 모든 스레드가 공평하게 CPU를 사용했기에 더 자주 CPU를 사용해야 할 스레드가 자주 CPU를 사용하지 못해서 비교적 비효율적 이었다.(FIFO방식) 이번엔 스레드마다 우선순위(Priority)를 부여해서 ready_list에 우선순위 순으로 정렬하여 삽입하고, 우선순위가 높은 스레드부터 CPU를 점유하도록 개선할 것이다. 또한, 이미 특정 스레드가 CPU를 사용하고 있더라도 더 높은 우선순위의 스레드가 ready_list에 들어오면 CPU를 빼앗는 선점(Preemption)도 구현할 것이다. 단 timer_interrupt마다 thread_a..

PintOS 프로젝트 1주차 [Threads / Alarm Clock]

PintOS는 알람을 구현할 때 기본적으로 busy waiting 방식을 사용한다.따라서 sleep/wakeup 방식으로 개선하는 것이 목표이다.  timer_sleep 함수는, running중인 스레드를 지정된 ticks 동안 blocked 시키는 함수이다.기존의 timer_sleep은 위 사진처럼 busy waiting이 일어나도록 설계되어 있다. 지정된 ticks가 지날 때 까지 while문 조건을 끝없이 검사하며 의미없이 CPU를 잡아먹는다.즉, 지정된 시간을 기다리기만 할 뿐인 스레드가 무의미하게 while문을 돌며 CPU자원을 소모한다. 이것이 busy waiting이며, 개선해야 하는 부분이다.  어떻게 개선해야 하는가?- thread 구조체에, 깨어나야 할 시간을 의미하는 Local Tic..

[PintOS] 키워드 정리 ( Process, Thread, CPU Scheduling, Semaphore, Mutex, Race Condition, Deadlock, Context Switching, MLFQ )

프로세스(Process)- 관리하는 최소 단위의 작업, 주기억장치에 등록된 프로그램 즉 실행중인 프로그램- CPU에 의해 실행되는 시스템 및 사용자 프로그램- 하나의 응용 프로그램은 여러 개의 프로세스로 이루어질 수 있음 스레드(Thread)- “하나의 프로세스 내에서 동시에 진행되는” 작업 갈래, 흐름의 단위ex) 하나의 브라우저에서, 파일을 다운받으면서 음악을 듣고 쇼핑을 하고 게임도 하는 것- 멀티(다중) 스레드 : 스레드가 여러 개 있는 것- 스레드는 프로세스의 메모리 영역(Code, Data, Heap, Stack) 중 Stack만 할당받아 복사하며, 나머지 Code, Data, Heap은 다른 스레드들과 “공유” 한다.- 따라서 Stack은 별도이지만 Heap은 공유하기 때문에 서로 다른 스레..

728x90
반응형