什么是阻塞和非阻塞?我们就用管道的读写来举例子。
如果没听过管道,就把他理解成文件就行。
一个程序打开管道,并且往管道里面写入数据;
int main() { int fd = open("fifo", O_WRONLY); if (-1 == fd) { perror("open"); } char buf[32] = {0}; scanf("%s", buf); if (write(fd, buf, strlen(buf)) == -1) { perror("write"); } return 0; }另一个程序打开管道,从管道里面读取数据。
int main() { int fd = open("fifo", O_RDONLY); if (-1 == fd) { perror("open"); } char buf[32] = {0}; if (read(fd, buf, sizeof(buf)) == -1) { perror("write"); } return 0; }默认情况下,用open打开管道是阻塞的模式,也就是说,如果管道没有数据,程序一直停在 read 函数这里,直到管道里面有数据,把它读出来。
阻塞和非阻塞指的是调用者(程序)在等待返回结果(或输入)时的状态。 阻塞时,在调用结果返回前,当前线程会被挂起,并在得到结果之后返回。 非阻塞时,如果不能立刻得到结果,则该调用者不会阻塞当前线程。 因此对应非阻塞的情况,调用者需要定时轮询查看处理状态。
全部0条评论
快来发表一下你的评论吧 !