이미 싱글톤 GS(Global Setting)에 대해서는 다른 포스팅에서 여러번 밝혔다.

바이너리 세마포어, 혹은 뮤텍스 이름은 거창하지만 단순 플레그일 뿐이다. 펌웨어 쪽에서도 마찬가지.

물론, 펌웨어 쪽에서 경험없는 엔지니어의 플래그 하나를 잘못 읽거나 세팅하면 시스템이 죽어 버리지만

앱에서는 그럴일 없다. 문제는 다른 swift 파일에 쓰여진 bool 값이 얼마나 오래동안 유지될 수 있느냐.

그래서 gs가 있고 gs는 프로젝트 전반에 걸치는 부분을 모아 둠으로서 메모리에서 내려가지 않게 만드는 것이 관건이다.

행여나 내려가면 앱을 다시 시작시키거나 리소스를 복원하는 작업을 해야 한다. 나중에 모바일 하드웨어가 데스크탑 수준이 되면

걱정거리는 줄겠지만 그런 류의 생각은 항상 해야하고 항공 SW 처럼 커널 수준의 앱에서 모든 것을 제어하기에는 이미 컨트롤

되지 않는 멀티태스킹 작업이 통합을 방해하고 사람 목숨과 관련된 것을 만들기 어렵게 한다.


항상 고민해야지.


 var bSemaphore : Bool = true

 let queue = DispatchQueue(label: "com.hajunho." + UUID().uuidString)



GS.s.queue.sync {} 혹은 async... 


개인적으로는 main queue가 아닌 global queue는 쓸 일이 많지 않다. 블루투쓰나 RESTFUL API 의 동시성 역시 @escape 클로저 로 동시성을 맞추는 것이 가능하기 때문이다. 또 이미 iOS 에서 추상화된 API가 모두 concurrency를 만족한다. 앱 자체도 멀티태스킹이 되니 Node.js 가 증명한 것처럼 Queue 하나면 족하다. 




+ Recent posts