Group Study 03/24
시간 : 18:40~21:00
참가자 : 김도윤, 최교득, 이동헌
Task :
- 쓰레드
- DeadRock(데드락)
- 쓰레드의 종류
- 레이스 컨디션이란?
- 동기화
- 3/24일자 코드 복습
- 23일자 피드백 정리
활동내역
1. Multi Chating 구조에 대한 이해
쓰레드세이프란 멀티쓰레드 환경에서 안전하다라는 의미입니다.
쓰레드세이프해야하는 자료구조 예시는 CRUD를 생각해보자.
예를 들어 우리가 CRUD같은 작업을 하는 동안 발생하는 트랜젝션들이 발생합니다.
멀티쓰레드 환경에서 안정적으로 동작해야해하기 때문에 다량의 트랜젝션들이 꼬이면 안됩니다.
여러 개의 쓰레드가 하나의 리소스를 건들게 되면 문제가 발생할 수 있다.
그래서 불변이라는 개념이 필요한겁니다.
--> 동기화 (한 번에 하나씩 처리) <->비동기 (한 번의 여러 개 처리)
하나의 쓰레드가 끝날 때까지 기다렷다가 다음 쓰레드를 처리하게끔 하자!
- 동기화를 사용한 멀티채팅 코드 완성
2. Synchronized Method
- 스레드 동기화 문제가 발생할 수 있다.
멀티 - 스레드는 잘 사용하면 좋은 성능을 내지만, 스레드 간 동기화 문제를 해결해야 함
동기화 문제는 heap에서 발생 - 스레드 동기화 문제를 해결하기 위해 thread - safe를 해야하는데 사용하는 키워드는 Synchronized이다.
- ArrayList thread safe
최소한의 작업에대가만 걸어야한다. 왜냐면 너무 많이 사용하면 멀티스레드의 의미를 상실함 - lock을 하기 위해서 해주는 작업
DeadRock(데드락)
Synchronized Method를 사용하면 야기할 수 있는 상황이 데드락(교착상태)이다.
무분별한 동기화 사용은 멀티쓰레드의 의미를 상실하게 만듬과 동시에 시스템의 문제를 야기할 수 있다는 점
→ 교착상태!!!!!!
- 데드락의 예방 , 회피, 부정에 대해 정리
Daemon Thread(데몬 스레드)
- 메인 스레드를 보조하는 역할을 하는 것이 데몬스레드
- 메인 스레드를 종료하면 데몬 스레드가 강제 종료된다.
- setDaemon(true)를 호출해서 데몬스레드의 영역을 지정할 수 있다.
- 데몬스레드를 이용하는 대표적인 예가 가비지 컬렉터
- 가비지 컬렉터는 호출하지 않아도 실행되고 메모리 관리를 해주는 역할이다.
- 주의점은 스레드를 실행하는 start() 메소드가 호출되고 나서 setDaemon(true)를 호출하면 IllegalThreadStateException이 발생하기 때문에start() 메소드 호출 전에 setDaemon(true)를 호출해야 합니다.
- 현재 실행 중인 스레드가 데몬 스레드인지 아닌지를 구별하는 방법은 isDaemon() 메소드의 리턴값을 조사해보면 됩니다. 데몬 스레드일 경우 true를 리턴합니다.
내일 저녁에 만들어 볼 코드
- 데몬 스레드인지 아닌지 구별해보는 코드 짜보기
- 웹 크롤링 셀레니움 해보기
- 더 생각해봐야할 내용
- 가비지 컬렉터와 핸들링을 할 수 있느냐 없느냐? 메모리 영역을 자동적으로 지우지 않게 우리가 컨트롤 할 수 있는가?
'Group_Study' 카테고리의 다른 글
Group Study 03/25 (0) | 2022.03.27 |
---|---|
Group Study 2022.03.23 (0) | 2022.03.24 |
2022.03.22 Group Study (0) | 2022.03.23 |