본문 바로가기

컴퓨터/Server21

DB 연동하기 ODBCODBC는 윈도우에서 정해진 데이터베이스에 접근하는 표준 규격이다. ODBC는 SQL 표준 인터페이스에 근간을 두고 서로다른 데이터 베이스에 맞는 요청으로 자동 변환하여 사용할 수 있게 만들어 준다. 따라서 서로 다른 데이터 베이스의 API를 몰라도 ODBC 인터페이스에서 정해진 방식만 따라가면 그 데이터 베이스를 사용할 수 있다. 이를 위해 각 DB별로 별도의 모듈 및 드라이버가 필요하다. 대부분의 DBMS들이 ODBC를 지원하기 위한 드라이버를 제공하고 있다.ODBC에 DB 등록하기ODBC로 데이터베이스에 접근하기 위해서는, 사용하고자 하는 DBMS를 ODBC관리자에서 추가한 뒤에 사용해야 한다. 자세한 내용은 링크ODBC 준비하기DB에 연결하기 위해서 먼저 ODBC에 사용되는 핸들을 생성해야.. 2015. 5. 9.
멀티쓰레드 서버 버그잡기 멀티 쓰레드 버그잡기 1. LockOrderCheckervoid LockOrderChecker::Pop(FastSpinlock* lock) { /// 최소한 락이 잡혀 있는 상태여야 할 것이고 CRASH_ASSERT(mStackTopPos > 0); /// 당연히 최근에 push했던 녀석이랑 같아야겠지.. CRASH_ASSERT(mLockStack[mStackTopPos - 1] == lock); mLockStack[--mStackTopPos] = nullptr; } 버그 메시지는 여기서부터 시작한다. Lock Stack의 top과 pop할 대상 lock이 다르다! 이 스택은 LockOrderChecker에서 LockHierachy 유지를 위해서 사용하던 스택이다. 스택하면 생각나는 버그는 ABA이다. .. 2015. 5. 4.
Lock Free Lock Free지금까지 자원 Lock의 필요성과 여러가지 Lock의 활용방식을 공부했다. 논리적 측면에서 Deadlock 이슈를 피해서 lock을 사용한다면, 문제없이 자원공유가 가능한 것처럼 보인다^^. 하지만 멀티 쓰레드 프로그래밍의 어려움은 여기서 부터 시작한다. 앞에서 조금씩 언급했지만, 무차별적인 Lock은 기아현상을 유발할 수 있다. 사용자가 느끼기에 중요한 쓰레드가 상대적으로 별로 중요하지 않은 쓰레드에 밀려서 자원획득을 못하고 있을 가능성도 있다. 프로그래머가 프로그래밍을 잘하면 해결할 수 있는 문제라고 생각할지도 모른다.그럼 성능이슈는 어떤가? CRITICAL_SECTION을 사용하는 Mutex역시 시스템 자원이다. Lock을 거는것 하나하나가 시스템 자원요청이라고 생각하면 락을 거는 .. 2015. 4. 28.
Thread Local Storage Thread Local Storage멀티 쓰레드 프로그래밍을 하다보면 불편한게 있다. 쓰레드별 고유한 전역변수(또는 정적변수) 사용하기가 어렵다는 것. 쓰레드를 그냥 만들면 쓰레드에게 주어진 혼자만의 공간은 지역적인 stack영역 뿐이다. 일반적인 전역변수는 다 공유되는 data영역에 저장된다. 그렇다고 힙에 만들어도 private 힙이 아닌 이상 역시나 공유되는 공간이다. 그렇다고 int하나를 위해서 private 힙을 만드는 것은 말이 안된다. 스레드가 특정 함수만을 반복적으로 수행하면 별로 필요없다고 생각할 수 도 있는데, 막상 없으면 아쉽고 쓸려면 없다. Thread Local Storage(이하 TLS)는 쉽게(?) 쓰레드별 저장공간을 마련해주는 방법이다.TLS의 원리https://msdn.mi.. 2015. 4. 26.