# 동시성 프로그래밍 활동학습 ## Concurrency Programming ### 동시성(Concurrency) 프로그래밍, 병렬(Parallelism) 프로그래밍은 어떻게 다르며, 우리가 주로 접할 iOS 환경에서는 무엇을 더 고려해봐야 할까 - 동시성 프로그래밍 : CPU의 코어수를 활용하기 위해 스레드를 이용하여 여러가지 일을 동시에 작업하는 프로그래밍 - 병렬 프로그래밍 : 프로그램을 동시에 실행시키지만 연속된 프로세서 타임을 필요로하지 작업을 수행하는 프로그래밍 물리적으로 코어가 여러개 있을때, 각 코어들이 실제로 동시에 작업을 처리하는 것 - 멀티코어 CPU가 보급되면서 현재 iOS 환경에서는 애플리케이션이 많은 작업을 하지만 일부의 코어만 사용하고 있어 낭비되는 자원을 활용하기 위해 동시성 프로그래밍을 더 고려해야한다. ### 동시성 프로그래밍, 병렬 프로그래밍, 동기(synchronous)와 비동기(asynchronous)의 개념은 어떤 상관관계를 가질까? - 동시성 프로그래밍 : 다중 스레드 활용 - 병렬 프로그래밍 : 다중 코어 활용 - 동기(synchronous)는 작업이 끝나기를 기다린 후 다음 작업을 처리 - 비동기(asynchronous)는 해당 작업을 하는 동안 다른 작업 처리 - 동시성 프로그래밍과 병렬 프로그래밍은 반대되는 개념이 아니며, 각 방법마다 동기/비동기를 처리할 수 있다. 동기/비동기는 서로 반대되는 개념이다. - 동시성 프로그래밍 - 동기 - 비동기 - 병렬 프로그래밍 - 동기 - 비동기 ### 애플이 동시성 프로그래밍 또는 병렬 프로그래밍을 지원하기 위해 사용하는 기술엔 무엇무엇이 있을까? - ### 프로그래밍에서 Thread는 무엇이고 iOS 환경에서 이를 다루기 위한 방법에는 무엇무엇이 있으며 그 차이는 무엇일까? - 스레드는 컴퓨터 프로그램에서 실행되는 흐름의 단위를 뜻한다. - GCD(Grand Central Dispatch) : 비동기적 기술로, 응용프로그램에서 작성하는 스레드 관리 코드를 사용하여 해당 코드를 시스템 수준으로 이동시킨다. 실행할 작업을 정의하고 적절한 디스패치 큐에 추가한다. - dispatch queue : 사용자 지정 작업을 실행하기 위한 C 기반의 메커니즘으로 직렬또는 동시적으로 작업을 실행하지만 선입선출 순서로 작업을 실행한다. - distpatch source : 특정 유형의 시스템을 비동기적으로 처리하기 위한 C 기반 메커니즘으로, 이벤트에 대한 정보를 캡슐화하고 해당 이벤트가 발생할때 마다 특정 블록객체 또는 함수를 dispatch queue에 제출한다. - operation queue : NSOperationQueue 클래스에 의해 구현되는 concurrent dispatch queue와 동등한 Cocoa 작업의 실행 순서를 결정할 때 주어진 작업이 다른 작업에 완료에 의존하는지 여부를 판단하여 실행한다. - 차이 : - 1. 작업 순서 : dispatch queue - 선입선출 operation queue - 다른 요소들을 고려하여 작업의 실행 순서를 결정 - 2. dispatch queue는 serial dispatch queue도 존재함 - 3. dispatch queue는 메인 대기열에서 작업 항목을 동기식으로 실행하려고 하면 교착상태가 발생 ## Process, Processor ### Windows 운영체제는 32bit 버전, 64bit 버전, ARM 버전 등 다양한 버전이 존재합니다. 이 버전은 어떤 것을 의미하며 왜 이렇게 다양한 버전이 존재해야 할까요? - 사용되는 하드웨어의 아키텍쳐와 메모리 용량 등에 따라 최적화된 운영체제를 제공하기 위한 것이다. 운영체제의 기능보다는 하드웨어와의 호환성과 최적화된 성능을 보장하기 위한 것 ### 내 매킨토시의 프로세서는 무엇인가요? - Apple M1 ### 애플이 새로 출시한 매킨토시 컴퓨터에서 iOS의 애플리케이션을 실행할 수 있는 이유는 무엇일까요? - Intel칩을 벗어나 애플의 자체적인 프로세서(애플 실리콘), macOS Big Sur 운영체제를 가졌기 때문 ### 이전의 매킨토시 컴퓨터에서는 불가능했던 이유는 무엇일까요? - Intel칩이었기 때문에 ### 프로세서를 위한 프로세스 스케쥴링 방식에는 어떤 것이 있는지 간략히 알아봅시다 - FCFS(First-Come First-Served) 준비 상태 큐에 도착한 순서에 따라 차례로 CPU에 할당 - SJF(Shortest Job First) 실행시간이 가장 짧은 프로세스에게 먼저 CPU 할당 - Round Robin Scheduling 삭 프로세스는 시간 할당량 동안만 실행, 완료되지 않으면 다음 프로세스에게 CPU를 넘겨주고 준비상태 큐의 가장 뒤로 배치 - Priority Based Scheduling 프로세스마다 우선순위 부여하여 CPU에 할당 - Multi queue Scheduling 프로세스를 특정 그룹으로 분류할 수 있을 경우 그룹에 따라 각기 다른 준비단계 큐 사용, 큐마다 다른 스케줄링 기법 사용 가능 ### 운영체제 입장에서 다양한 프로세스를 스케쥴링하는 규칙을 만들어봅시다. - ## 보너스 ### 앞으로 iOS와 macOS는 통합될까요? 리지 : 될 것같다. 현재에도 새로운 칩과 운영체제가 생기면서 일부가 상호작용되기 때문에 미래에는 결국 하나로 통합될 것 같다...! 무리 : 안 될것같다. 하드웨어적인 차이가 있기 때문에 사용자와 상호작용 가능한 화면이 한개인 휴대폰과 같이 사용하기에는 어려움이 있을 것 같다.