操作系统中的线程实现

操作系统中的线程实现

一对一模型

每条用户线程交由唯一对应的系统线程进行调度,在这种设计下创建线程和创建系统进程的代价是相同的。

多对一模型

多条用户线程交由一条系统线程进行调度,这个系统线程也是唯一一条,所以无法适应多核环境,即使是在多核环境下也只能同时运行一条线程。

多对多模型

多条用户线程对应多条系统线程,在多核环境下系统线程可以并行地进行运算。这种设计可以使得用户线程的创建效率变高,但是导致系统内核设计的复杂性增加。

Linux中的线程和进程

Linux使用核外1对1线程模型,使用进程来模拟线程,把线程的调度交由唯一对应的系统线程,也就是说在Linux系统中用户线程的本质即是系统线程也就是进程,线程的创建代价和进程是一样的,区别只是同一个进程下的线程可以共享进程的内存空间。

  • 在linux中可以被内核调用的线程叫做进程。
  • 每一个进程有一个系统唯一指定的进程号(Process ID,PID)和一个线程组号(Thread Group ID,TGID)。
  • 进程分为两类,一类是不包含TGID的普通进程,一类是包含TGID的线程型进程。
  • 如果一个线程型进程的PID=TGID,就被称作是主线程。

windows中的线程和进程

windows同样采用1对1的线程模型,在windows中一个进程表示一个基本CPU运行单位,但是进程本身只负责存储进程信息,进程本身不包含任何可执行代码,所有的执行代码都放在线程中。

总结

  • 创建线程无法达到节省创建时间的目的。
  • 每次切换线程都会从用户态进入系统态,线程调度的上下文切换成本很高。

所以在程序中应该避免频繁地创建和销毁线程,也不应该在程序中同时保留过多的线程。

猜你喜欢

转载自blog.csdn.net/turbo_zone/article/details/82891092