阻止IO如何影响Linux中的多线程应用程序/服务
问题描述:
我正在Linux上用C语言探索一个Web爬虫的几个概念。为了决定是否使用阻塞IO,多路复用OI,AIO,某种组合等,我特别需要知道(我可能应该通过一些测试代码为我自己发现它,但为了方便起见,我更愿意从别人那里知道)当在阻塞模式下调用IO时,它是特定线程(假设是多线程应用程序/ svc)还是整个进程本身被阻塞?更具体地说,在一个多头(POSIX)应用程序/服务中,专用于远程读取/写入的线程是否会阻止整个过程?如果是这样,我怎样才能在不终止整个过程的情况下解锁这样的线程?阻止IO如何影响Linux中的多线程应用程序/服务
注意:我是否应该使用阻塞/非阻塞并不是真正的问题。
请
答
阻塞调用仅阻止,使他们,而不是整个过程的线索。
是否要使用阻塞I/O(每个线程有一个套接字)或非阻塞I/O(每个线程管理多个套接字)都是您必须进行基准测试的。但根据经验...
Linux可以合理有效地处理多个线程。所以如果你只处理几十个套接字,每个套接字使用一个线程很容易编码,并且应该表现良好。如果你正在处理数百个套接字,那就更接近了。对于成千上万的套接字,使用一个线程(或进程)来管理大型组可能会更好。
在后一种情况下,为获得最佳性能,可能需要使用epoll
,即使它是Linux特有的。
线程将是相当无用的,如果整个过程被阻塞,每当一个线程被阻止...... –