Linux 上拥有更多线程的进程是否会比拥有一个线程的进程拥有更多的 CPU 时间?
在 Linux 中,进程和线程由 task 结构描述,调度是基于 tasks 的。我还发现了这个:
创建新进程时
do_fork()
,按以下方式设置当前(父)和 p(子)进程的计数器字段:current->counter >>= 1; p->counter = current->counter;
换句话说,留给父母的滴答数被分成两半,一份给父母,一份给孩子。这样做是为了防止用户通过使用以下方法获得无限量的 CPU 时间:父进程创建一个运行相同代码的子进程,然后杀死自己;通过适当调整创建速率,子进程将始终在其父进程的量程到期之前获得一个新的量程。这个编程技巧不起作用,因为内核不奖励分叉。类似地,用户不能通过在 shell 中启动大量后台进程或在图形桌面上打开大量窗口来占用处理器的不公平份额。更一般地说,一个进程不能通过分叉多个后代来占用资源(除非它有权给自己一个实时策略)。
实际上我在内核源代码中没有找到,但也许是我的错,也许我看到了错误的内核版本。
但是以后会发生什么,每个线程会像一个单独的进程一样参与调度吗?一个有十个线程的进程会比一个有一个线程的进程获得十倍的滴答声吗?从这个意义上说,IO 呢?