[컴] 동시성, 병렬, 동기, 비동기

 

용어 설명 / jargon / programming concepts /

동시성, 병렬, 동기, 비동기

좋은 그림들을 모아놓아 준 글이 있어서 글을 보면서 다시 나의 언어로 정리를 좀 해본다.

동시성 / 병렬, concurrent / parallel

  • concurrent 는 동시에 동작하는 것처럼 보이면 되는 수준: 이것은 time 이 중요할 듯. 어떤 task에서는 1s 안에 2개가 수행되면 concurrent 로 보겠지만, 어떤 task 에서는 0.1s 안에 2개가 수행되어야 concurrent 로 볼테니.
  • parallel 은 진짜 동시에 동작하는 것: 그러니까 쉽게 컴퓨터 2대를 동시에 실행하는 수준, 대체로 이 수준이 되려면 hw 가 2개인 수준으로 봐야 할 듯 하다. 예를 들면 core가 2개
  • parrallelism 은 hardware적인 고려이고, concurrency 는 software적인 고려(from 생각하는 프로그래머)

그래서 single core 에서는 concurrent 는 지원하지만, parallel 은 지원하지 않는다고 볼 수 있다.

sync/async, block/non-block

ref. 1 의 async 의 설명은 조금 이상하다. : 작업의 완료여부를 ’누가 확인’하느냐에 sync/async 를 구분짓는다고 하지만, 확인의 의미가 모호하다. 만약 thread 1 이 thread2 에게 task 를 요청하고, 그 task 가 끝나면, thread 1 에게 notify 를 줄 수 있다. 하지만 이 noti 를 확인하는 주체는 thread 1 이다. 그렇기 때문에 ’누가 확인’을 하느냐에 따라 sync/async 를 구분하는 것은 이상해 보인다.

sync/async 는 쉽게 동작이 sychronous 하는가 (일치하는가) 를 생각하면 될 듯 하다. 여러 thread 가 있지만, 하나의 thread 가 동작할 때, 다른 thread 가 특정 task 를 수행하지 않는다면, 그것은 synchronous 하다고 할 수 있다. 예를 들어, 네트워크 요청을 하는 경우를 보자. 하나의 thread 에서 ’요청’을 한 이후, 다른 일을 하지 않고, 기다리는 것이 synchronous 라고 이야기하는데, async 인 경우는 ’요청’을 한 후 자신이 다른 작업(code line 이라고 이해하면 될 듯)을 한다. 이런 식의 동작을 모두 async 라고 부를 수 있다. 만약 네트워크 ’요청’이후, 그 thread 가 결과를 받기위해 polling 을 한다고 해보자. 이것은 async 인가 sync 인가? 이것은 async 를 지원하지만, 그 동작은 synchronous 하게 보이게 만든 것이라 봐야 한다. 그래서 async/sync 의 설명은 code level 로 명확하게 이야기 하기 어렵다고 생각한다.

  • sync : sync(동기)는 1개의 thread 가 작업을 한다고 보면 된다. 그래서 특정 함수를 실행하면, 그 함수의 내부를 그 thread 가 다 돌고나서, return 값을 가지고 그 다음 함수를 수행한다. 물론 2개의 thread 에서도 가능하다. 함수를 다른 thread 에게 실행하게 하고, 처음 thread 는 그냥 놀고있는 것이다. 하지만, 이런 구조는 실제로 존재하지 않을 듯 하다. 굳이 현재 thread 가 놀아야 하는데 왜 2개의 thread를 사용하겠는가.

  • async : async(비동기)는 2개의 thread 가 있고, 그 가운데 queue 가 2개 있다고 보면 좋을 듯 하다. 1개는 thread 1 에게 notify 하는 queue 이고, 다른 하나는 thread 2 에게 notify 하는 queue 라고 가정하자. 이때, thread 1 는 일을 하다가 thread 2 에게 특정 task1 을 수행하라고 queue 에게 message 를 던진다. 그러면 thread2 는 그것을 받고 일을 시작한다. 그러다가 끝나면, queue 를 통해 thread 1 에게 결과를 알려준다. 이때 thread 1 은 2가지 행위를 할 수 있다. 하나는 thread 2 에서 결과를 보낼때까지 queue 를 계속 보고 있거나(blocking), 아니면, 그냥 자기 할일을 하다가 간간이 queue 를 확인하는 것이다.(non-blocking)

  • 쿠…sal: [컴][자바] 동시성, Concurrency from java tutorial

  • Progress Updates and Incremental Results A class that adheres to th

Reference

  1. 동시성, 병렬, 비동기, 논블럭킹과 컨셉들 :: BlaCk_Log

cd php sudo make php-734.32

댓글 없음:

댓글 쓰기