据我所知,线程是进程的执行流程,进程的所有线程共享一些公共结构。此外,在现代 PC 中,CPU 只执行线程,而不执行进程。
我不明白这个词的含义过程和线在Linux中。 Linux真的区分进程和线程吗?其作用是任务结构结构?
我读过Linux调度task_struct来执行,所以我认为task_struct代表一个线程而不是一个进程,但是查看内部任务结构体的定义我看到有一个对task_struct 子级的引用。一个线程真的可以生孩子吗?
答案1
在用户级别,aprocess
属于操作系统。 ,具有process
环境和标准文件描述符(stdin、stdout、stderr)的副本,这些描述符是从操作系统继承的。Threads
属于一个进程,并且属于同一进程的多个线程共享该进程的环境和文件描述符。
是的,进程和线程都可以有子进程。这里的词child
只是指操作系统根据现有进程/线程的请求创建的新进程/线程。
task_struct
是一个使进程和线程成为可能的东西。这就是它们内部的制作方式。但在用户级别,无法访问task_struct。如果您编写自己的内核 - 那么您肯定必须使用它以及调度程序。
process
因此,如果您深入了解内核和/或 CPU 的工作原理 - 那么是的,和之间没有真正的区别thread
,因为它们是由相同的实际现实生活完成的过程。区别仅在于用户级别,以及实际应用程序的工作方式。
我建议您获取一份副本并阅读 Andrew Tanenbaum 所著的“Modern Operating Systems”,https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X/ 这是该主题最好的教科书。