활동학습 아래 질문은 모둠과 함께 활동학습 게시판에 정리해봅시다. ## Concurrency Programming 1. 동시성(Concurrency) 프로그래밍, 병렬(Parallelism) 프로그래밍은 어떻게 다르며, 우리가 주로 접할 iOS 환경에서는 무엇을 더 고려해봐야 할까? - 동시성 프로그래밍은 하나의 코어에서 여러 개의 스레드가 동시에 여러 개의 테스크를 수행할 수 있는 환경을 말합니다. - 병렬 프로그래밍은 여러 개의 CPU(코어)가 하나의 테스크를 수행하는 것을 말합니다. - 병렬 프로그래밍은 개발자가 제어할 수 없는 부분이기 때문에 개발자는 스레드를 제어할 수 있는 동시성 프로그래밍을 고려해야합니다. 2. 동시성 프로그래밍, 병렬 프로그래밍, 동기(synchronous)와 비동기(asynchronous)의 개념은 어떤 상관관계를 가질까? - 병렬 프로그래밍은 동시성 프로그래밍과는 어떠한 관계가 없습니다. - 동시성 프로그래밍은 동기와 비동기를 사용해서 작업을 제어할 수 있습니다. - 동시성: Serial이냐, Concurrent인가는 스레드가 단일 스레드인가, 다중 스레드인가의 구분 - 동기/비동기: 스레드의 수와는 무관하게 작업이 끝나기를 기다리냐, 기다리지 않느냐의 구분 3. 애플이 동시성 프로그래밍 또는 병렬 프로그래밍을 지원하기 위해 사용하는 기술엔 무엇무엇이 있을까? - GCD(Grand Central Dispatch), Operation, Async/Await 4. 프로그래밍에서 Thread는 무엇이고, iOS 환경에서 이를 다루기 위한 방법에는 무엇무엇이 있으며 그 차이는 무엇일까? - 쓰레드(Thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위입니다. - iOS 문서에서는 코드에 대한 별도의 실행 경로(The term thread is used to refer to a separate path of execution for code)를 쓰레드(Thread)라고 정의합니다. - Thread를 다루기 위한 방법에는 GCD와 Operation이 있습니다. - GCD: 작업을 선입선출의 순서대로만 진행합니다. - Operation: 다른 작업의 완료에 의존하는지 확인하여 종속성을 구성하여 작업에 대한 복잡한 실행 순서 그래프를 생성, 진행합니다. ## Process, Processor 1. Windows 운영체제는 32bit 버전, 64bit 버전, ARM 버전 등 다양한 버전이 존재합니다. 이 버전은 어떤 것을 의미하며 왜 이렇게 다양한 버전이 존재해야 할까요? - 32bit, 64bit는 명령어의 길이를 의미하고 하드웨어가 발전함에 따라 더 많은 메모리를 사용할 수 있게 되었고 32bit로는 표현하지 못하는 메모리 주소를 표현하기 위해 64bit 운영체제가 탄생하게 되었습니다. - 또한 모바일기기가 보편화되어 적은 배터리 사용량과 발열을 막기 위해 ARM이라는 운영체제가 탄생하게 되었습니다. - 즉 하드웨어에 최적화된 운영체제를 사용하기 위해 여러 운영체제가 탄생하게 되었습니다. 2. 내 매킨토시의 프로세서는 무엇인가요? - Mint, Erick, redmango : Apple M1 Pro - Minsup: 2.2 GHz 쿼드 코어 Intel Core i7 - Hoon: 2 GHz 쿼드 코어 Intel Core i5 3. 애플이 새로 출시한 매킨토시 컴퓨터에서 iOS의 애플리케이션을 실행할 수 있는 이유는 무엇일까요? - M1은 ARM기반으로 되어있고 ios도 ARM 기반의 운영체제를 사용하기 때문에 실행가능 합니다. 4. 이전의 매킨토시 컴퓨터에서는 불가능했던 이유는 무엇일까요? - 같은 명령어 체계가 아니기 때문입니다. 5. 프로세서를 위한 프로세스 스케쥴링 방식에는 어떤 것이 있는지 간략히 알아봅시다. - 선점 스케쥴링: 한 프로세스가 cpu를 할당받아서 실행하고 있을 때 다른 프로세스가 cpu를 사용하고 있는 프로세스를 중지시키고 cpu를 차지할 수 있는 스케줄링 기법을 선점 스케줄링 기법이라고 합니다. - 비선점 스케쥴링: 이미 사용되는 cpu를 빼았지는 못하고 사용이 끝날 때 까지 기다리는 스케줄링 기법입니다. 6. 운영체제 입장에서 다양한 프로세스를 스케쥴링하는 규칙을 만들어봅시다. - iOS 환경에서 앱의 상태에 따라 우선순위를 주어 CPU자원을 할당합니다. - Foreground active: 1순위 - Foreground Inactive: 2순위 - Background: 3순위 - Suspended: 4순위 ## 보너스 앞으로 iOS와 macOS는 통합될까요? - 애플에게 문의하세요 애플 마음