进程的子线程为do_sys_poll, 会阻塞到进程吗
时间: 2024-03-04 16:52:50 浏览: 18
如果进程的子线程调用了 `do_sys_poll` 系统调用,那么只有该子线程会被阻塞,而不会影响整个进程的运行。这是因为线程是进程的执行单元,不同的线程可以独立运行,互不影响。
当子线程调用 `do_sys_poll` 系统调用时,只有该子线程会被阻塞,其他线程可以继续执行。这样可以让程序更加高效地利用多核 CPU,提高程序的性能。
需要注意的是,如果一个线程被阻塞,那么它将无法执行任何其他任务,直到事件发生或者超时时间到达。因此,在设计多线程程序时,需要合理地安排线程的任务,避免出现线程阻塞导致整个程序性能下降的情况。
相关问题
do_sys_poll线程 会阻塞到进程吗
是的,当进程调用 `do_sys_poll` 系统调用时,该进程将被阻塞,直到所监视的文件描述符上有事件发生或者超时时间到达。这是因为 `do_sys_poll` 函数会将当前进程挂起,等待内核通知它所监视的文件描述符上是否发生了感兴趣的事件。
需要注意的是,`do_sys_poll` 函数只会阻塞调用该函数的当前线程,而不是整个进程。如果进程中有其他线程在运行,它们不会被阻塞,可以继续执行其他任务。但是在同一线程内,`do_sys_poll` 函数会一直阻塞,直到事件发生或者超时时间到达。
do_sys_poll
`do_sys_poll` 是 Linux 内核中的系统调用,它用于等待一组文件描述符上的事件发生。该系统调用会阻塞当前进程,直到指定的文件描述符上发生了感兴趣的事件,或者超时时间到达。
`do_sys_poll` 的函数原型如下:
```c
int do_sys_poll(struct pollfd *fds, int nfds, long timeout_msecs);
```
其中,`fds` 是一个指向 `struct pollfd` 数组的指针,每个元素描述一个待监视的文件描述符及其感兴趣的事件;`nfds` 是数组的元素个数;`timeout_msecs` 是超时时间,单位是毫秒。
`do_sys_poll` 返回值为发生事件的文件描述符个数,或者出错时返回负数。如果超时时间到达而没有任何事件发生,返回值为 0。
注意,`do_sys_poll` 函数并不直接被用户程序调用,而是通过 `poll` 或者 `select` 系统调用间接调用。