작성자 | 히카 | ||
---|---|---|---|
작성일 | 2013-09-15 11:50:21 KST | 조회 | 261 |
제목 |
재미없는 프로그래밍 이야기
|
http://minjang.egloos.com/1665441
팬티엄 4 CPU의 3.8Ghz를 기점으로 그 이상의 클럭은 나오지 않고 있습니다
그 이상의 클럭을 가정하면 발열량이 감당할 수 없는 수준이 되기 때문인데, 컴퓨터 제조사들은 결국 멀티코어라는 개념을 만들어내지요.
하지만 하드웨어적 발전은 소프트웨어적 발전에 선행하기 때문에 사용에서 여러 문제가 발생하는데
프로그램 자체가 멀티코어에 적합하지 않은 양식을 가지고 있을 경우 하나의 코어밖에 쓰지 않는단거에요
최근에는 멀티코어를 지원하는 프로그램들이 많아졌지만 몇년전만 해도 2.0Ghz의 듀얼코어보다는 3.8Ghz의 싱글코어가 훨씬 성능이 좋게 뽑힌다고 싱글코어 우세론이 만연했었죠. 이런 문제는 특히 게임에서 두드러졌습니다. 특히 많은 CPU작업을 요구하는 심시티4 러시아워도 3Ghz싱글코어가 1.8Ghz쿼드보다 게임을 더 잘돌립니다.
최근에는 프로그래밍 입문서적에도 멀티쓰레딩의 개념을 찾아볼 수 있습니다. 쓰레드는 각 코어에 할당할 수 있도록 작업을 분할해놓은 단위로 보면 됩니다. 그러나 단순히 '작업을 나눠 놓으면' 작업이 더 빠른 속도로 이뤄지는게 아니라는 이야기가 이 포스트에서 다루는 내용입니다.
두 가지 이상의 작업이 한 자료를 참조하면 데이터베이스의 일관성을 유지하기 위해서 한 작업만이 데이터에 접근할 수 있습니다. 만약 두 쓰레드를 두 ATM으로 가정하고, 사람 두명이서 동시에 입/출금을 한다고 해보죠. 이때 DB에 접근제한을 해주지 않으면 이 두가지가 동시에 일어납니다.
<1번 ATM>
DB에 100만원 -> 10만원 인출함 -> DB 이제 넌 90만원임
<2번 ATM>
DB에 100만원 -> 20만원 입금함 -> DB 이제 넌 120만원임
그럼 DB에는 90만원이 적힐까요 120만원이 적힐까요? 이런 문제가 해결되기 위해서는 애초에 'DB에 얼마인지'를 알아낼때 접근 제한이 이뤄져야 한다는 이야기입니다. 1번ATM이 100만원을 읽어내는 순간 2번은 1번이 끝날때까지 뒤에서 대기하고 있어야 된다는 이야깁니다
하지만 이런 접근 제한이 다중 쓰레드의 작업의 성능 저하에 심각한 영향을 끼친다는겁니다. 자전거에서 페달을 꾸준히 밟듯이 루프를 도는 쓰레드 둘이서 같은 DB를 참조하면 당연히 대기시간이 길어질수밖에 없다는거죠. 간단하게 비유를 하면 "종이 자르는 일을 두 명이서 하는데, 가위가 하나밖에 없는 상황" 인겁니다.
즉 이러한 쓰레드의 의미는 '무조건 많은 인원이 빠르게 일을 할 수 있다'는 이야기가 아니라는 겁니다. 그리고 제가 이런 글을 왜 썼냐면... 그걸 모르겠네 헤헷
|
||
|
|
||
|
|
||
|
|
||
|
© PlayXP Inc. All Rights Reserved.