docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

'Docker & k8s' 카테고리의 다른 글

[K8S] 2. Kubernetes Commands  (0) 2022.02.03
[K8S] 1. Kubernetes Core Component  (0) 2022.02.03
도커란? (Docker)  (0) 2020.12.17
쿠버네티스(k8s)는 무엇인가  (0) 2020.12.17
How to fix docker error processing tar file  (1) 2020.11.13

Java Thread

  • 하나의 프로세스 안에 여러 개의 스레드가 동시에 작업 수행
  • 스레드 == 하나의 작업단위
  • 자바에서 스레드 구현은 2가지 방법이 있다 : Runnable 인터페이스, Thread 클래스 상속
    • 공통점 : 둘 다 run() 메소드를 오버라이딩하는 방식
    • 차이점 : 인스턴스 생성 방법
      • public class MyThread implements Runnable
        • 해당 클래스를 인스턴스화해서 Thead 생성자에 argument로 넘겨줘야함
        • currentThread() 호출해서 현재 스레드의 참조를 얻어와야 호출 가능
      • public class MyThread extends Thread
        • 상속받은 클래스를 스레드로 사용
        • 스레드 클래스의 method을 바로 사용
  • start() 메소드를 호출하면, JVM은 알아서 스레드를 위한 콜 스택을 만들어주고 context switching을 통해 스레드로 동작하도록 해줌
  • 스레드 상태
    • NEW : 스레드가 생성되고, start()가 호출 X
    • RUNNABLE : 실행 중 or 실행 가능 상태
    • BLOCKED : 동기화 블록에 의해 일시 정지된 상태 (lock 풀릴 때까지 wait)
    • WAITING : 실행가능하지 않은 일시 정지 상태
    • TERMINATED: 스레드 작업이 종료된 상태
  • synchronized를 활용하여 임계 영역(공유 자원에 하나의 스레드만 접근) 설정 가능
  • wait() : 스레드가 lock을 가지고 있으면, lock 권한 반납하고 대기하게 만듦
  • notify() : 대기 상태인 스레드에게 다시 lock 권한을 부여하고 수행하게 만듦

'Language > Java' 카테고리의 다른 글

JVM이란  (0) 2020.11.15

자바 가상 머신(JVM)

  • 자바 애플리케이션(ByteCode)을 클래스 로더를 통해 읽어들여 자바 API와 함께 실행

  • JAVA와 OS 사이에서 중개자 역할 – 따라서 JAVA가 OS에 구애받지 않게 재사용

  • 가장 중요한 메모리 관리(Garbage collection)을 수행

  • 스택 기반의 가상 머신

JVM 구성 = Class loader + Execution engine + GC + Runtime Data Area

  • 클래스 로더 : 클래스(.class)를 로드하고, 링크를 통해 배치

  • 실행 엔진 : 클래스를 실행 / ByteCode -> 기계어로 변환하는2가지 방식

    • 인터프리터 : 명령어 단위로 읽음. 한 줄씩 실행해서 느림

    • JIT (just in time)

      • 인터프리터 방식으로 실행하다가 byte code 전체 컴파일

      • 네이티브 코드로 실행하고 네이티브 코드로 직접 실행

      • 네이티브 코드는 캐시에 보관하므로 컴파일 후 빠르게 수행됨

    • GC : 힙 내의 객체 중 참조되고 있지 않은 객체를 찾아내 메모리 회수 (실제로는 실행 엔진 내부에 존재한다고 봐도 된다)

      • Minor GC
        • 새로 생성된 객체는 Eden 영역에 위치
        • Eden 영역에서 GC가 발생하고 남은 객체는 Survivor 영역(2개) 이동
        • 위 과정 반복하다 계속 살아남은 객체는 계속 참조 – Old 영역 이동
      • Major GC
        • Old 영역의 객체 모두 검사 -> 참조되지 않은 객체 한꺼번에 삭제
        • Major GC가 발생하면 GC 실행 스레드 제외 나머지 스레드 모두 중지
        • GC 작업 이후에 중단 작업 다시 시작
        • Full GC가 일어나는 수초간 모든 Thread가 정지한다면 심각한 장애 발생
  • Runtime Data Area = Method, Heap, Stack, PC register, native method stack

    • 쓰레드가 생성되었을 때 기준으로 메소드, 힙 영역은 모든 쓰레드가 공유 / 스택, PC register, native method stack은 각 쓰레드마다 생성되고 공유 X
    • Method Area : 메소드 영역 (ex> 변수 이름 등 필드 정보, 메소드 정보,static 변수)
    • Heap Area : new 키워드로 생성된 객체와 배열이 생성되는 영역. 메소드 영역에 로드된 클래스만 생성, GC가 참조되지 않는 메모리를 확인하고 제거하는 영역
    • Stack Area : 지역변수, 파라미터, 리턴 값, 임시값 등이 생성되는 영역, 인스턴스 생성시 스택 영역에 생성된 변수 값이 힙 영역에 생성된 객체를 가리키는 것 (메소드 스택)
    • PC register : Thread가 생성될 때마다 생성되는 영역, program counter, 즉, 현재 쓰레드가 실행되는 부분의 주소와 명령을 저장
    • Native method stack : 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역(ex> C)

'Language > Java' 카테고리의 다른 글

Java Thread  (0) 2020.11.23
class Task(APIView):
    def get(self, request):
        questions = Task.objects.filter(client=request.user)
        serializer = TaskSerializer(questions, many=True)
        return Response(serializer.data)

오타없이 제대로 작성한 것 같은데 위와 같은 에러가 뜬다면

위 예시처럼 views.py의 class명과 model 이름이 일치하기 때문에 발생하는 에러이다.

class명과 model name을 다르게 설정하면 제대로 동작한다.

models.py에서

user_foreign_key = models.ForeignKey("auth.User", on_delete=models.CASCADE, verbose_name="foreign_key")

위와 같이 user의 외부키 필드를 설정해놓고 

user_data = UserData.objects.get(data_foreign_key="something")

정작 views.py에서는 유저 모델의 일부 속성만으로 접근했을 때 뜨는 에러이다.

 

해결법은

위 model.objects.get으로 접근하기 전에 

user = User.objects.get(email=client_attribute)
user_data = UserData.objects.get(data_foreign_key=user)

위처럼 User.objects.get을 거쳐서 나온 객체를 비교값으로 넣어주면 제대로 작동된다.

pip install로 파이썬 패키지를 다운로드할 때 -killed 이라며 중지되는 경우가 있다.

 

해결법은

pip install <package> --no-cache-dir

+ Recent posts