TIL - 2021.04.26 (Mon)

Youngwoo Lee·2021년 5월 8일
0

TIL

목록 보기
21/29
post-thumbnail

오늘의 공부 주제

  • 1학기를 돌아보는 퀴즈
  • 프로세서, 프로세스
  • 동시성 프로그래밍과 비동기 프로그래밍(Operation Queue)

1학기를 돌아보는 Quiz⭐️

헷갈렸던 것 위주로!!!

Q1
Type의 추상화를 통해 내부 기능 구현 방식에 대해 더 쉽게 이해할 수 있다 ( X )

→ 추상화를 통해 클라이언트가 내부 구조를 몰라도 사용할 수 있게

ex) print 함수의 내부 기능을 몰라도 쓸 수 있도록

Q2
SOLID 원칙에 따라 프로그래밍을 할 때 추구해야 할 방향이 아닌 것은?

→ 클래스의 의존관계는 되도록 구체적인 클래스와 맺는 것이 좋다! (x)

자식클래스로 갈수록 구체적이다

구체적으로 된 것 뿐이니깐 자식클래스가 부모클래스를 대체할 수 있어야 한다.

구체적인 클래스일수록 좀 더 세분화되서 맞춤형이다. 너무 구체적이면 의존관계를 맺을 때 고쳐야할게 많다.

클래의 의존관계는 추상화된 클래스와 맺는 것이 좋다

Q3
아래의 보기중 테스트 할 대상, 테스트 할 코드를 지칭하는 단어는??

SUT(System under test)

Q4
lldb 명령어 중 변수를 검사할 수 있는 명령어

fr v, p, po

특정 변수가 어떤 상황일 때 보는 명령어 : wa

Q5
모든 프로그램은 메모리에 올라와야 실행할 수 있다 = "폰 노이만" 구조




프로세서, 프로세스 💻

요즘 애플Mac, MacBook의 이슈! M1🍎

32비트와 64비트 시스템의 차이??

CPU 레지스터의 크기의 차이가 있다. 이 레지스터의 크기가 클수록 한 번에 더 커다란 데이터를 처리할 수 있다!

  • 레지스터 : 주기억장치에 올라온 데이터들을 CPU 내부에 저장해두면서 연산을 할 공간이 필요하다. 이 부분을 레지스터가 담당. 계산 중간에 필요한 결괏값이나 CPU의 내부 상태를 보관한다

그럼 왜 64비트로 진화했냐??

→32비트 아키텍처의 경우 쓸 수 있는 RAM 크기가 한정되어 있어서...

64비트 CPU가 나옴으로써 RAM 크기가 늘었다!!

ARM 아키텍처??

→ 임베디드 기기에 많이 사용되는 RISC 프로세서이다. 저전력을 사용하도록 설계하여 ARM CPU는 모바일 시장 및 싱글 보드 컴퓨터로 불리는 개인용 컴퓨터에서 뚜렷하게 강세를 보인다

RISC = Intel CPU에서 많이 사용되는 CISC의 경우 복잡한 명령어 집합을 갖는 CPU 아키텍처이다. 하지만, RISC의 경우 CPU 명령어의 개수를 필요한 것, 많이 사용되는 것만을 챙김으로써 상당히 많이 줄여, 하드웨어 구조를 좀 더 간단하게 만들었다.




동시성 프로그래밍과 비동기 프로그래밍(Operation Queue)

동시성 프로그래밍?? 병렬성 프로그래밍?? 비동기 프로그래밍??

에 대해서 알아보기 전에 알아야될 개념들!

코어

프로세서에서 코어는 주요 연산회로이다. 싱글코어는 말 그대로 하나의 연산회로가 내장되어있는 것이고 듀얼코어는 두 개의 연산회로가 내장된 것을 뜻한다. 또, 여러 개의 코어를 가진 프로세서를 멀티 프로세서라고 한다.

스레드

스레드는 하나의 프로세스 내에서 실행되는 작업흐름의 단위를 말한다. 보통 한 프로세스는 하나의 스레드를 가지고 있지만, 프로세스 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 방식을 멀티 스레딩이라고 한다. 그리고 프로그램 실행이 시작될 때부터 동작하는 스레드를 메인 스레드라고 하고 이외에 나중에 생성된 스레드를 서브 스레드 또는 세컨더리 스레드라고 한다


Synchronous : 동시에 일어나는

  • 동기는 말 그대로 동시에 일어난다는 뜻이다. 그 결과가 동시에 일어난다는 약속인데, 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.
    • 요청과 결과가 한 자리에서 동시에 일어남
    • A노드와 B노드 사이의 작업 처리 단위를 동시에 맞추겠다

Asynchronous : 동시에 일어나지 않는

  • 비동기는 동시에 일어나지 않는다는 의미합니다. 요청과 결과가 동시에 일어나지 않을거라는 약속입니다.
    • 요청한 그 자리에서 결과가 주어지지 않음
    • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다

동기방식은 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 한다는 단점이 있다. 비동기방식은 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있는 장점이 있다

그러니깐 비동기 프로그램(Asynchronous) 의 경우

코드의 실행 결과처리를 별도의 공간에 맡겨둔 뒤 결과를 기다리지 않고 바로 다음 코드를 실행하는 병렬처리 방식이다. 비동기 프로그래밍은 언어 및 프레임워크에서 지원하는 여러 방법을 통해서 구현할 수 있다


동시성 프로그래밍

논리적인 용어로 동시에 실행되는 것처럼 보이는 것이다. 싱글코어, 멀티코어에서 멀티스레드를 동작시키기 위한 방식으로 멀티 태스킹을 위해 여러 개의 스레드가 번갈아 가면서 실행되는 방식이다. 동시성을 이용한 싱글 코어의 멀티 태스킹은 각 스레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 서로 번갈아 가면서 실행되고 있는 방식이다.

병렬성 프로그래밍

물리적으로 동시에 정확히 동시에 실행되는 것을 말합니다. 멀티 코어에서 멀티 스레드를 동작시키는 방식으로 데이터 병렬성과 작업 병렬성으로 구분됩니다.

  • 데이터 병렬성 : 전체 데이터를 나누어 서브 데이터들로 만든 뒤, 서브 데이터들을 병렬 처리해서 작업을 빠르게 수행하는 방법이다.
  • 작업 병렬성 : 서로 다른 작업을 병렬 처리하는 것을 말한다

동시성(Concurrency) 과 병렬성(Parallelism) 차이

동시성 프로그래밍과 병렬성 프로그래밍 모두 비동기(Asynchronous)동작을 구현할 수 있지만, 그 동작 원리가 다르다. 아래 그림처럼 비유해 볼 수 있다

  • 동시성(Concurrency) : 통장을 만들러 온 N개의 대기열과 한 명 이상의 은행직원
  • 병렬성(Parallelism) : 통장을 만들러 온 N개의 대기열과 N개의 창구가 있는 것

근데 이렇게 동시성 프로그래밍을 하기 위해서는 우리는 GCD, Operation 객체를 이용한다


Operation Queue = 연산의 실행을 관리하고 대기열의 동작관리를 하는 것

Operation 은 태스크와 관련된 코드와 데이터를 나타내는 추상 클래스이다. Operation Queue는 연산의 실행을 관리한다. 대기열에 추가한 동작은 직접 제거할 수 없다.

연산은 작업이 끝날 때까지 대기열에 남아 있습니다. 연산을 대기열에서 제거하는 방법은 연산을 취소하는 방법 뿐이다. 취소하는 방법은

  1. 연산 객체(Operation Object)의 cancel()메서드를 호출하거나
  2. Operation Queue의 cancelAllOperations() 메서드를 호출하여 대기열에 있는 모든 연산을 취소하는 방법이 있다.

그리고 실행 중인 연산의 경우 연산 객체의 취소 상태를 확인하고 실행중인 연산을 중지하고 완료 상태로 변경한다.

연산 객체(Operation Object)

연산 객체는 애플리케이션에서 수행하려는 연산을 캡슐화하는데 사용하는 Foundation 프레임워크의 Operation 클래스 인스턴스이다.

profile
iOS Developer Student

0개의 댓글