|
[필독] 처음 오시는 분을 위한 안내 (734) |
정은준1 |
2014-05 |
5155741 |
0 |
2014-05
5155741
1 정은준1
|
|
(광고) 단통법 시대의 인터넷가입 가이드(ver2.0) (234) |
백메가 |
2015-12 |
1690140 |
25 |
2015-12
1690140
1 백메가
|
36365 |
인터넷 시작페이지가 변경 불가능합니다. (10) |
이동재 |
2004-01 |
8153 |
50 |
2004-01
8153
1 이동재
|
36364 |
Ti 4200 카드에서 TV 보는 방법? (2) |
이상기 |
2004-01 |
7662 |
36 |
2004-01
7662
1 이상기
|
36363 |
윈도우 시스템 복원 참 후지네요... (6) |
VSPress |
2014-10 |
6276 |
0 |
2014-10
6276
1 VSPress
|
36362 |
혹시 해상도 높은 모니터 중 크기가 작은 것은 어떤 제품이 있을까요? (5) |
2FluF |
2017-01 |
5212 |
0 |
2017-01
5212
1 2FluF
|
36361 |
Usb 꼽고 부팅시 (4) |
빠시온 |
2018-03 |
4409 |
1 |
2018-03
4409
1 빠시온
|
36360 |
예전에 썼던 DSL과 DDL케이블의 차이점 입니다. (4) |
송상병 |
2004-01 |
9932 |
91 |
2004-01
9932
1 송상병
|
36359 |
iDrac, chrome 질문입니다 (4) |
박성만 |
2013-05 |
4947 |
0 |
2013-05
4947
1 박성만
|
36358 |
가상 환경에서 Synology 와 Windows 의 볼륨 확장 (2) |
witbox |
2023-07 |
1725 |
0 |
2023-07
1725
1 witbox
|
36357 |
..DDR500을 듀얼채널로 하면 DDR1000 (4) |
이재선 |
2006-09 |
5171 |
31 |
2006-09
5171
1 이재선
|
36356 |
인쇄업체 홈페이지를 제작 의뢰하려하는데요.. (11) |
미파이브 |
2014-10 |
5309 |
0 |
2014-10
5309
1 미파이브
|
36355 |
ZIO 24포트 허브가 벌써 2대째 맛이 가버렸습니다. ㅠㅠㅠ (10) |
신은왜 |
2018-03 |
4222 |
0 |
2018-03
4222
1 신은왜
|
36354 |
핸드폰 병렬 연결 해서 연산 시키기 어렵나요? (10) |
가빠로구나 |
2010-04 |
10983 |
0 |
2010-04
10983
1 가빠로구나
|
36353 |
윈도우에서 네트워크 품질 검사하는 방법이 있나요? (3) |
이원재K |
2021-12 |
1705 |
0 |
2021-12
1705
1 이원재K
|
36352 |
이런 보이스피싱은 수익 모델이 뭔가요? (7) |
미수맨 |
2022-01 |
1883 |
0 |
2022-01
1883
1 미수맨
|
36351 |
HP Z400 소음정도와 X5687, X5650 모델은? (2) |
블루스카이 |
2014-11 |
7313 |
0 |
2014-11
7313
1 블루스카이
|
36350 |
httpd 408 응답오류 관련.. (3) |
e5472 |
2016-02 |
12498 |
0 |
2016-02
12498
1 e5472
|
36349 |
cpu, memory 대역폭 관계 (5) |
sdlfkjwer |
2020-07 |
5212 |
0 |
2020-07
5212
1 sdlfkjwer
|
36348 |
ESXI 7.0.U1e>7.0.U3n 업데이트를 하고싶은데 에러가 발생합니다... 원인이 뭘까… (6) |
Elsaphaba |
2023-08 |
3450 |
0 |
2023-08
3450
1 Elsaphaba
|
36347 |
e3400 에서 제온 e5420 업글하는데 실패햇어요 도와주세요 (1) |
소환사킹 |
2014-11 |
3606 |
0 |
2014-11
3606
1 소환사킹
|
36346 |
마우스 클릭이 잘 안됩니다. (3) |
박용선 |
2006-10 |
5980 |
26 |
2006-10
5980
1 박용선
|
만약 그러면 여러 코어를 뭉쳐 하나의 스레드를 처리하게 하자고 할 수 있습니다만, 정말 꿈도 희망도 없는게 현실인 이야기입니다. 딱 잘라 비유를 하면 토니 스타크에게 60분동안 고3 수학 문제 5명분을 풀라고 하는건 가능해도 고3 5명을 모은다고 아크 리액터를 못 만드는 것과 같습니다.
관련 사항이 궁금하실 경우 Speculative multithreading라는 것을 찾아 보십시오. 학술적으로는 말이 많지만 현실적으로는 그야말로 꿈도 희망도 없는 기술이라는걸 알게 될 것입니다.
그 이유중 하나가
모든 작업에는 임계구역이라는게 존제하는데요
이 구역은 협업이 불가능한 구역입니다.
예를 들자면
A = 1+ 2 + 3 +4
이라면 통상적으로
CPU1이 1+2를
CPu2가 3+4를하고
CPU1,CPU2중 아무나가 3+7을 처리하여 A에 저장하면 끝입니다.
하지만 중요한점은
A = 1 + 2 * 3
이라면
CPU1이 2*3을 처리하는동안
CPU2는 아무것도 할수가 없습니다.
만약 CPU2가 임계구역을 침범하여 1+2를 수행한다면 원하는 값이 아닌 다른값이 나오겠죠?..
물론 CPU는 승산을 할수는 없습니다만..
단순하게 예를 들은것입니다..
저도 그리 잘은 모릅니다만... qt 든 vc++든 윈도 이벤트로 작동하는 소프트웨어는 그런걸로 알고 있습니다... 실제로 제가 만든 프로그램은 씽글 쓰레드이지만 프레임워크 자체가 멀티 쓰레딩이기때문에 항상 보면 수십개의 쓰레드가 돌고있더라고요..
물론 제가 어느 특정 알고리듬을 멀티쓰레딩으로 처리하려면 그부분은 멀티쓰레딩 작업을 해줘야겠죠...
씽글 쓰레드 이지만 수십개의 쓰레드가 돈다는 것 말인데요...
이렇게 이해 하면 되는 건가요?
씽글 쓰레드 안에 파일을 읽고 연산을 하고 저장을 하고 이런 것을 루프로 돌릴 경우
저장 하는 부분만 (안전한 범위 내에서) 따로 OS 에서 쓰레드로 빼서 돌린다는 얘기인가요?
하지만 예를 들어서 제가 윈도우 프로그램을 만들면 (DOS 프로그램이아닌) 윈도우 프로그램 자체가 멀티쓰레드라는 이야기입니다. 윈도우 프로그램의 프레임워크가 멀티쓰레드이기 때문에 가끔 문제가 생길때도 있습니다. 예를 들어 어떤 라이브러리의 함수를 제가 호출을 할때 그함수가 글로벌 static variable 에 영향을 주는 경우가 있으면 그 함수가 MFC 또는 닷넷의 라이브러리소속이면 그 라이브러리 차체도 멀티 쓰레드일수 있기때문에 그 함수를 제가 만든 static 함수에서 호출을 한다고 가정을 하면 variable 의 값이 꼬이는것을 본적이 있습니다. 그리고 또한 제 함수에서는 하나의 쓰레드만 있다고 가정을 하고 프로그램을 만들었는데 라이브러리내의 함수가 lower level 에서 자꾸 멀티 쓰레딩을 해가지고 sequencial i/o 를 해야 하는경우에 문제가 생기기도 합니다. 얼마전에 ftp 라이브러리를 썼더니 그렇게 되었습니다. ftp 커넥션이 엄청나게 생겨버린거죠... 제함수에서는 ftp 가 이루어지고 있으면 다른 커넥션을 만들지 말라고 되어있는데도 더 아래단에서 자체적으로 여결을 하는것이였습니다.... 쓰레딩으로...
실험을 해보세요... hello world 어플리케이션을 윈도 어플리케이션으로 만드셔가지고 윈도우를 띄워놓은 상태에서 쓰레드가 몇개인지 함보시면... 제가 틀렸을 수 도 있습니다~
지금 제 컴터에 VisualStudio 가 있었으면 바로 했봤을텐데요...
이번 주말 전에는 함 해보겠습니다...
기본적인 윈도우 프로그램은 단일 스레드입니다.
CPU 모니터 창이 바둑판이던 시스템.