사례
프로세스 내 다수의 스레드가 존재하고 병행 실행
시스템 내 다수의 프로세스가 병행 실행
프로세스에게 이벤트 발생을 알리는 통지 기법이다.
프로세스는 입출력이 시작되면 끝날 때까지 기다려야 함
동기식(Blocking) I/O 기법을 사용
하나의 Application이 두 개 이상의 입력 채널을 감시할 때
-동기식(Blocking) I/O 기법 사용 시 문제점
대안 : Non-Blocking I/O 기법의 활용
프로세스가 입출력 시작 후 완료될 때까지 기다리지 않는 방법
- 비동기식 I/O 기법이나 입출력 전담 스레드를 사용
Grace Murray Hopper
"황소 한마리로 하지 못하는 일이 있으면 더 큰 황소를 활용하지 말고 두 마리의 소로 처리 하라"
Seymour Cray
"넓은 밭을 갈아야 한다면 두 마리의 소를 쓸 것인가 ? 아니면 1024마리의 닭을 쓸 것인가?"
참고, 병렬성은 하드웨어 기준으로 여러개 처리하는 것, 병행성은 소프트웨어 기준으로 처리하는 것이다.
scanf("%s", buf);
sacnf("%79s", buf);
// 코드의 다운로드 여부 확인
ls Downloads
// 작업 디렉토리("usp") 생성 및 예제 코드 이동
mkdir usp
cd usp
mv ../Downloads/usp_all.tar .
// 예제 코드의 아카이브 풀기
tar xvf usp_all.tar
// 예제 코드 확인
ls
// 예제 코드 디렉토리로 이동 및 내용 확인
cd chapter01
// READ 파일 내용 확인 (Under Linux 부분)
// 리눅스 환경에 부합하는 예제 코드 컴파일 환경 설정
ls
./convertlinux
// 예제 코드 컴파일 : make 이용
make
ls -l불편함 없이 원활한 코드 확인 및 진행을 위한 메이크, gcc 두개 다 추가설치 해야한다.
#include <stdio.h>
#include <string.h>
int checkpass(void) {
int x;
char a[9];
x = 0;
// stderr : 표준 오류채널, fprintf는 방향지정 해줌<->printf
fprintf(stderr, "a at %p and \n x at %p\n", (void*)a, (void*)&x);
printf("Enter a short word : ");
scanf("%s", a);
if(strcmp(a, "mypass") == 0)
x=1;
return x;
}
int main(void)
{
int x;
x = checkpass();
fprintf(stderr, "x= %d\n",x);
if(x)
fprintf(stderr, "Password is correct!\n");
else
fprintf(stderr, "Password is not correct!\n");
return 0;
}