2번 multi thread 방법 질문
242
2 câu hỏi đã được viết
그런데 fd가 사용하는 read API 동시에 여러개 사용되지 못하기 때문에 동일한 디바이스 드라이버의 read함수를 사용한다면 결국은 한번에 하나의 fd만 읽을 수 있는 것 아닌가여?
Câu trả lời 1
0
안녕하세요. Gone님
각각의 thread가 다른 fd를 read하기 때문에 blocking 영향을 받지 않는다고 이해하셨다고 하셨는데요, 저는 이 말을 잘 이해하지 못하겠습니다.ㅠ
I/O multiplexing은 여러 thread가 서로 다른 fd를 read하고 있는 것이 아닙니다. 기본적으로는 한 프로세스가 여러 fd에 대해 read할 수 있도록 하는 것입니다. fd에 read를 하면 blocking 됩니다. 즉, read 할 것이 있을 때가지 대기하는 것입니다. read할 것이 생기면 해당 데이터를 읽어들이며 read 함수에서 리턴하게 되구요.
select 등의 I/O multiplexing 함수는 다르게 동작합니다. read하고 싶은 fd들을 등록해두고 select()를 호출하면, 등록해둔 fd들 중에 read할 것이 생기면 그 때 select()에서 리턴하게 되고, 어떤 fd냐의 정보를 보고 해당 fd에 대해 read하면 곧바로 리턴하게 됩니다. 여기에서 select()에 등록한 여러 fd에 대해 여러 thread가 대기하고 있는 것이 아닙니다. select()를 호출한 사용자 프로세스는 하나인 것이고, 여러 fd에 대해 읽을 것이 있는지 기다리는 것은 리눅스 커널이 해주는 일입니다. 사용자 프로세스와는 관계가 없습니다.
디바이스 드라이버의 read ops는 디바이스 드라이버마다 다르게 동작합니다. 따라서 디바이스 드라이버의 종류에 따라 한 프로세스만 read할 수 있는 것도 있고, 여러 프로세스가 동시에 read할 수 있는 것들도 있습니다.
질문에 대한 답변이 됐는지 모르겠네요. 답변이 너무 늦어져 죄송합니다. 추가 질문 있으시면 댓글로 남겨주세요. 감사합니다!
inotify 객체에 등록된 watch descriptor 해제 관련 질문
0
37
2
select API 실습 코드 질문
0
40
2
wsl에서 fcntl사용
0
72
2
inotify_event 구조체 질문 [파일 이벤트 - 라이브 프로그래밍]에서...
0
180
2
./stat 파일이름
0
273
2
fopen r, r+모드 차이
0
460
2
강의를 모두 수강하고 스스로 구현하면 좋을 과제나 프로젝트 주제가 있을까요?
0
326
1
pthread 질문
0
419
2
I/O Multiplexing(select) 질문
0
325
1
inotify.c. ret 질문
0
302
1
inotify.c 질의합니다.
1
317
1
child process
0
715
1
read/blocking
0
564
1
flock
0
565
1
system call
0
598
1
pthread_create() 함수 이용했을 때, thread가 두번 호출되는 것 처럼 나타납니다. 왜 그런것인가요?
0
487
1
fork() 함수 사용시 결과 관련 질문
0
371
1
exec 관련 궁금한 사항
0
450
2
파일 디스크립터와 FILE 구조체에 대한 질문
0
552
1
buf 선언에 따른 read() fail 문제
0
251
2
파일 이벤트 - 라이브 프로그래밍 에서 캐스팅 질문
0
254
1
segmentation fault 발생 관련 문의
1
842
1
라이브 코딩 실습 코드
0
235
1
화면이 짤려요
0
549
4

