JustQyx

大道至简

Thread

| Comments

进程、线程

进程是指操作系统中正在运行的一个程序;线程是系统分配处理器时间的基本单元,或者说进程之类独立执行的一个单元。

对于操作系统而言,其调度单元是线程。

一个进程至少包括一个线程,通常将该线程称为主线程。进程从主线程的执行开始,进而创建一个或多个附加线程,这就是所谓的基于多线程的多任务。

进程是对正在运行程序的一个抽象,是一组资源(处理器、内存以及I/O设备)的集合体,进程把资源集中到一块,而线程才是 CPU 调度的实体。

进程与进程之间,内存空间是独立的,而线程与线程之间内存是共享的。

在单处理器的系统中,多线程是按时间片方式运行,即并发; 在多处理器的系统中,多个线程可以同时运行,即并行。

线程模型

  • 内核级别线程(kernel-level threads)

    内核级别线程,是内核调度的基本单元,在每个进程中,至少存在一个内核级别线程。

  • 用户级别线程(user-level threads)

    用户进程自己实现的进程机制。在这种情况下,内核是不知道有多少线程存在的,同时线程上下文切换更快,而且在不支持多线程的操作系统上也能实现多线程。但是这种线程无法充分利用多处理器系统,如果进程中的一个线程执行阻塞的I/O请求,那么整个进程就会被阻塞。现在,大部分应用程序起来之后,其主线程就是一个用户级别的线程,它所能访问的资源是有限制的。

  • 混合线程(hybrid threads)

    混合线程,是内核级别线程和用户级别线程的混合体,提供了以上两种模型的优点,但带来很大的复杂性。

另外,不得不提的是另一个模型:绿色线程

绿色线程是指有虚拟机(VM)调度的线程,而不是通过内核调度,所以绿色线程是用户级别的线程。

线程安全

线程安全是多线程编程里的一个概念。一片代码段,当多个线程能以一种保证安全的方式同时操纵共享的数据结构时,那么这片代码段是线程安全的。

References

Comments