개발자

C언어 멀티 프로세스 코드 작성에 어려움을 겪고 있습니다...

2024년 03월 23일조회 166

WSL2 우분투 리눅스 22.04에서 c언어로 fork() 함수를 사용하여 간단한 멀티 프로세스 프로그램을 작성하였는데요. 이와 동일한 작업을 수행하는 단일 프로세스의 실행시간과 비교하였는데 수행 시간이 동일하게 나왔습니다. 시간 측정 방법은 리눅스 명령어 중 “time ./실행파일명” 을 사용하여 측정하였습니다. 해당 작업은 1~1000 까지 각 숫자에 7을 곱한 값을 출력하는 것입니다. 두 코드의 수행 시간이 동일하면 안 되고 멀티 프로세스가 단일 프로세스보다 수행시간이 작아야 하는 것으로 알고 있습니다. 아래는 저의 멀티 프로세스 코드입니다. 수행 시간이 단일 프로세스와 동일하니 멀티 프로세스가 제대로 되지 않는다고 생각됩니다... 해당 코드에서 프로세스가 제대로 생성되지 않는 이유가 뭘까요??

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

박범수님의 프로필 사진

hyperfine 이라는 툴로 벤치마크 해보았는데요. user 모드의 cpu 사용시간보다 system 모드의 사용 시간이 길게 나오네요 [User: 147.4 µs, System: 496.2 µs] 새로운 프로세스를 할당하는 데에 시간을 많이 사용한 것으로 보입니다. 동시성의 이득을 보려면 입력이 더 커야 합니다. 다음과 같이 입력을 100배로 늘렸더니 동시성 코드가 더 빠르네요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//single.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>

int main() {
	int x=1; 
// 작업
	for(int i=x; i<=700000; i++) {
		printf("%d ", i);
	}
	printf("\n\n");
}

//multi.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>

int main() {
	pid_t pid; 
	int x=1; 
	// 총 2개의 프로세스 생성
	switch(pid=fork()) {
		case -1:	// fork 실패
			perror("fork");
			exit(1);
			break;
		case 0:	// 자식 프로세스
			x+=50000; 
			break;
		default:	// 부모 프로세스
			break;
	}
	// 총 4개의 프로세스 생성
	switch(pid=fork()) {
		case -1:	// fork 실패
			perror("fork");
			exit(1);
			break;
		case 0:	// 자식 프로세스
			x+=25000;
			break;
		default:	// 부모 프로세스
			break;
	}
	// 총 8개의 프로세스 생성
	switch(pid=fork()) {
		case -1:	// fork 실패
			perror("fork");
			exit(1);
			break;
		case 0:	// 자식 프로세스
			x+=12500;
			break;
		default:	// 부모 프로세스
			break;
	}
	printf("CurrentPID : %d\n", (int)getpid());
	// 작업
	for(int i=x; i<=x+12400; i++) {
		printf("%d ", i * 7);
	}
	printf("\n\n");
}
profile picture

익명

작성자

2024년 03월 24일

작업 수행시간이 프로세스 할당 시간에 비해 매우 짧다면 동시성으로 이득을 얻을 수 없다는 것이군요! 답변 감사합니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!