Skip to content

Latest commit

 

History

History
38 lines (37 loc) · 2.11 KB

스터디_내용.md

File metadata and controls

38 lines (37 loc) · 2.11 KB

9주차 스터디 내용

  • threading
    • python 은 GIL 이 있어서 병렬로 동작은 안된다
      • single thread 방식
      • i/o 바운드 프로세스 vs cpu 바운드 프로세스
        • python 에서는 cpu 연산이 많은 것을 쓰레드로 실행하면 성능 향상을 하기 어렵다
    • 질문
      • 멀티 프로세스, 멀티 쓰레드는 파이썬에만 있는가?
        • 모든 언어에있다.
      • 누구 자원인가?
        • os 가 관리하는 것이다. (os 에 멀티 프로세스, 멀티 스레드 라이브러리가 있는 것)
      • 왜 두개가있는지
        • 프로세스끼리는 남의 변수를 읽을 수 없다.
          • IPC(inter process comunication: 커널 메세지큐 공유메모리 등) 을 이용해서 자원 공유를 해야함
          • 사용하기 까다롭다
        • 이게 불편하니까 쓰레드 개념도 사용한다.
      • 쓰레드 : 프로세스 내에서 쪼개진것
        • 자원(변수) 을 공유하기는 쉽다. (일반적으로 잘 못 쓰면 프로그램이 죽는다.)
        • 파이썬은 GIL 이 있어서 아무렇게 써도 죽지는 않는다.
        • 디버깅 하기 힘들다
      • 쓰레드는 왜쓰나? block 되는 작업에 쓴다
        • block 이 한번 되면 다음 코드로 진행이 안되기 때문에 쓰레드를 이용해서 다른 작업을 따로 할 수 있다.
        • 예 - socket
          • create
          • listen
          • accept - 블락됨 (일반적인 코드에서는 다음 작엄을 못한다. -> 쓰레드 사용)
      • Lock()
        • 락은 순서제어를 위해 쓴다
          • 어떤 공유 변수가 있다.
            • 시작 - 작업 - 끝 과 같은 로직이 있다.
            • 작업 을 진행 할 때는 해당 변수를 다른 쓰레드가 접근하면 안되기 때문에 접근을 막아서 순서를 제어 하기 위한 것이다.
  • global / local 변수
    • global / nonlocal 키워드 사용
      • assign 을 진행할때 (construct 를 생성할때) 는 키워드가 필요
    • function 안에서 는 변수가 읽을 수 는 있다.
    • 예제 코드 참조