Blocking I/O, Non-Blocking I/O
I/O can take place in kernel level
process, thread needs to request for I/O in kernel
β Blocking I/O
block user process during I/O
- Process(Thread) requests I/O in kernel
- When kernel is done, return value to process
- when I/O is in process, user process(thread) has to wait
waste resource
- I/O does not use CPU
- If various client connecting server is made in blocking
- if there is I/O
- cannot stop client process
- need to create each process thread for each client
- if a lot of clients connect at once
- ππ» context switching between thread
β Non-Blocking I/O
does not block user process during I/O
- User process calls
recvfrom
method
tell kernel process needs data from socket - Kernel cannot return
recvfrom
immediately, so returnsEWOULDBLOCK
- User process does its work
- if there is data on
recvfrom
for user, recives data from Bufferrecvfrom
is on the memory of kernel, thus faster retrival of data recvfrom
will copy the data, and return to user
This post is licensed under CC BY 4.0 by the author.