2010-08-08 8 views
2

당신은 프로세스의 두 종류의 I/O 바운드 및 CPU 바인딩 ...가 알고있는 내가 자신을 종료 결코 CPU 바인딩 프로그램이 필요 절대로 CPU 바인딩 C 프로그램을 종료하지

...

예를 들면; 내가 원한 것 같아? 모든

while(1){ 

    for(int i=0;i<1000; i++); 

} 
+0

아마도 단일 코어에서. 멀티 코어, 확실히 아닙니다. – spender

답변

2

첫째, 왜 당신은 결코 종료하지 CPU 바인딩 프로그램을 원하는가?

네, 그럴 수는 있지만 실제로 for-loop를 사용할 필요는 없습니다. while 루프는 독자적으로 영원히 실행됩니다 (컴파일러가 최적화하지 않는다고 가정).

+0

나는 절대 종료 프로그램에 집중하는 커널 모듈을 만들 것입니다 ... 그래서 내부 루프를 넣지 않으면 "I/O 바운드 프로그램"이 될까요? – user414100

+0

제어 흐름을 종료 할 수 있으므로 유효한 최적화가되지 않습니다. – tster

+0

@tstr : 그는 while 루프 절에서 변수 참조가 사용되는 위치를 생각할 수도 있습니다. 변수 조회는 정적 분석의 일부 형식에 따라 최적화 될 수 있습니다. –

3

for(;;);해야합니다.

+0

니스 포인트. jmp $만큼 간결합니다. – siride

0

두 가지 종류의 프로세스가 있습니다. 어떤 리소스가 성능을 경계하고 있는지 고려해도 두 가지 이상이 있습니다. 고전적인 다른 것들은 대역폭, 메모리, 데이터베이스 연결입니다 - 어떤 유한 리소스 또는 블로킹 하나는 병목 일 수 있습니다.

그래, 프로세스가 CPU 바운드입니다. 작업 관리자 (Windows) 또는 활동 모니터 (Mac) 또는 맨 위 (Linux)에서 CPU의 100 %를 차지하는 것을 볼 수 있습니다.

0

아마도 이러한 프로그램은 CPU에 바인딩되지 않습니다.

에라 토 스테 네스 체 등을 구현하는 것이 좋습니다. 방법은 숫자 (예 : 42)를 1000 배로 나누고 1000 배 곱한 다음 원래 숫자에서 결과를 빼고 변수에 더하고 카운터를 증가시키는 방법은 어떻습니까? 그런 다음 무한정 반복하십시오. 숫자 값 중 하나가 오버플로 될 수는 있지만 해결할 수 있어야합니다.

+0

포크 폭탄을 만들 수도 있지만 CPU를 사용하는 동안 컴퓨터가 충돌하거나 사용하지 못하게 될 수 있습니다. – Slartibartfast

+0

그의 프로그램이 CPU 기반이 아닌 이유는 무엇이라고 생각하십니까? –

+0

내 컴퓨터에서 이러한 프로그램을 실행하면 CPU 사용량이 최대 100 %까지 증가합니다 (실행중인 코어의 경우). 예쁜 CPU가 제게 묶여있는 것 같습니다. – siride

관련 문제