동기 비동기를 보기전에 쓰레드를 봐야 한다.
pc사야중에 4코어 8쓰레드, 8코어 16쓰레드라는게 있는데
쓰레드는 일을 하는 녀석인데 8쓰레드는 일하는 녀석이 8개
16쓰레드는 일하는 녀석이 16개
1코어 1쓰레드 |
2코어 2쓰레드 |
4코어 4쓰레드 |
4코어 8쓰레드 |
쉽게 이렇게 생각하면된다
양손이 1쓰레드
일을 할때 하나의 스레드에서 하면 한작업이 끝날때까지 다른 작업을 하지 못하기 때문에 속도가 느려진다.
스레드가 많아지면 한번에 2가지 4가지 일을 할 수 있기 때문에 속도가 빨라진다.
동기 VS 비동기
비동기
작업을 다른 스레드로 보내는게 비동기 (여러개의 스레드가 돌아가서 작업을 처리한다)
동시에 일을 할 수 있다.
- 작업을 다른 스레드에서 하도록 시킨 후.
그 작업이 끝나길 '안기다리고' 다음일을 진행한다.
(안 기다려도 다음 작업을 생성할 수 있다.)
동기
작업을 다른 스레드로 보내지 않고 하나의 스레드에서 작업을 하는거 (하나의 스레드에서 차례대로 작업을 하는것)
동시에 일을 하지 않는다.
- 작업을 다른 스레드에서 하도록 시킨 후,
그 작업이 끝나길 '기다렸다가' 다음일을 진행한다.
(기다렸다가 다음 작업을 생성할 수 있다.)
비동기 라는 개념이 일반적으로 필요한 이유는 서버와의 통신 때문
직렬 (Serial) VS 동시 (Concurrent)?
직렬(Serial) 처리
(보통 메인에서) 분산처리 시킨 작업을 '다른 한개의 쓰레드에서' 처리
순서가 중요한 작업을 처리할 때 사용
동시(Cocurrent) 처리
(보통 메인에서) 분산처리 시킨 작업을 '다른 여러개의 쓰레드에서' 처리
각자 독립적이지만 유사한 여러개의 작업을 처리할 때 사용
분산처리 하려는거면 무조건 동시( Concurrent)처리'가 무조건 좋아 보이는데 왜 직렬 (Serial)처리가 필요할까?
작업에 순서가 필요한 경우가 있기 때문이다. 무조건 1번이 끝나고 2번이 실행되야 하는 경우
동시처리의 예
당근마켓 어플에서 목록을 봤을때 물건의 이미지를 하나씩 다 서버에서 가져올때 그 하나 하나가 동시처리
비동기(Async)와 동시(Concurrent)의 차이
비동기는작업을 보내는 스레드에 관련된말
동시는 메인 스레드에서 다른 스레드로 작업을 보낼때 한개냐 여러개냐의 개념
'개념정리' 카테고리의 다른 글
트랜젝션 (0) | 2021.04.02 |
---|---|
예외처리 (try,catch, throw, throws) (0) | 2021.04.02 |
비주얼스튜디오 (0) | 2021.03.30 |
자바 게시판 엑셀출력 (0) | 2021.03.30 |
spring 쿼리로그 출력, log4j (0) | 2021.03.29 |