쓰레드: 동기성과 비동기성

POSIX(포직스) 쓰레드를 이용한 프로그래밍
black ray ban sunglasses
개발하는 과제들이 하나 같이 소켓통신을 기반으로 하다보니 동기화(Syncrhonization)에 대한 이슈가 아주 중요함을 최근 많이 느끼고 있다. 막연하게 프로그램 설계 과정에서 적절하게 프로토콜을 만들어서 통신의 플로우를 잘 관리하면 될 것 같지만, 꼭 구현해야하는 기능들은 동기적으로 작동하기 보다는 비동기적으로 작동되어야 하는 경우가 훨씬 더 크다.
Oakley sunglasses Canada
메인 함수 내에서 비동기적으로 계속 모니터링이 필요한 함수를 구현하려다 보니 쓰레드에 대해서 좀 더 자세히 알아야 겠다는 생각이 들던 차에 랩실 서가에 꽂힌 책 한 권이 눈에 들었다. 제본된  POSIX쓰레드를 이용한 프로그래밍 책이었다. 나중에 검색해 보니 현재 절판되어 있어서 제본한 것 같다. 어제 집에 가는 길에 1~2장을 보면서 그 동안 막연하게 인식하고 있었던 “동기화(Synchronization)”, “비동기성(Asyncrhonization)”에 대한 개념의 본질을 이해할 수 있었다.
discount oakley sunglasses for men

http://www.fotopedia.com/items/flickr-522878837

“동기화”를 사전적인 개념으로 이해하면 동시에 무언가를 맞추어 진행 한다는 점이 핵심이다.  이런 의미에서 동기화는 메모리에 데이터를 주고 받을 때에 아주 중요하다. 메모리와 디바이스 간의 타이밍이 맞아야 적절하게 작동하기 때문이다. 즉 메모리의 클럭 타이밍과 디바이스의 클럭 타이밍이 싱크로나이즈 팀의 통일된 동작 처럼 일치해야 한다는 말이다.
nike air max 95
그런데 문제는, 소프트웨어 입장에서 (쓰레드나 멀티 프로세스 기반의 프로그래밍을 할 때) 동기화의 개념이 다소 차이가 난다. 이 때에는 동시에 같이 진행한다기 보다는, 서로 간의 시작과 끝이 꼭 맞아야 한다는 의미를 가진다. 따라서 소프트웨어 관점에서 동기화는 동시에 Job들이 진행될 수 없다. 이와 반대로 비동기화는 동시에 여러 Job들이 실행될 수 있다는 의미를 지니게 된다. 핵심은, 여러 Job들이 동시에 진행 될 수 있다는 맥락이 동기화와 비동기화에 대한 개념을 혼동시키는 것이다.
ray ban sunglasses Poland
쓰레드의 사용의 관점에서 볼 때, 쓰레드도 사용여부에 따라 동기적으로 쓸 수도 있고 비동기적으로 쓸 수 도 있다. 다만 쓰레드가 가지는 기능을 활용하는 측면에서 비동기적으로 사용하는 것이 일반적일 것이다.
ray ban sunglasses review
프로그램 상에서 아무리 여러 쓰레드를 돌리면서 수 많은 Job들을 효율적으로 처리한다고 하더라도 반드시 동기화가 필요한 지점이 생길 수 밖에 없다. 따라서 개발 할 때에 동기화될 부분과 비동기적으로 처리할 부분을 명확히 구분할 필요가 생기는 것이다. 그러면 자연스럽게 뮤텍스나 세마포어에 대한 이야기가 나올 수 밖에 없는 것이다. 이 부분은 이제 차츰 읽어가면서 또 생각해 보아야 겠다.