开发者

Is the timeslice given to a thread that is waiting on I/O "wasted"?

开发者 https://www.devze.com 2023-02-15 10:28 出处:网络
I\'m currently analyzing the pros and cons of writing a server using a threaded model or event driven model.I already know the many cons of the threaded model (does not scale well due to context switc

I'm currently analyzing the pros and cons of writing a server using a threaded model or event driven model. I already know the many cons of the threaded model (does not scale well due to context switching overhead, virtual memory limitations, etc.) but I came upon another one in my analysis and would like to verify that my understanding of threads is correct.

If I have 5 threads, 1 which is doing work (not being blocked), 4 which are being blocked waiting for I/O (for example waiting on data from a socket), isn't the CPU time given to those 4 threads essentially wasted since no work is actually being done (assuming no data arrives)? The timeslice given to those 4 blocked threads is taking away time from the 1 thread actually doing work, 开发者_运维百科correct?

In this case I'm explicitly saying that the socket is a blocking one.


No. Although it actually depends on the type of OS, type of I/O (polled/DMA) and device driver architecture, most device I/O is performed using DMA + interrupts. In such cases a thread is put into a sleep state until an interrupt is triggered for such I/O operations and scheduler does not visit those threads until their pending I/O is complete. Only polling I/O can cause consumption of CPU, such as PIO mode for hard disks.


Threads don't need to use their entire timeslice. I don't know the specifics, but if blocked threads even get time, they certainly don't use it all.

Obviously, these details vary platform-to-platform-to-environment-to-etc.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号