程序、进程、线程和任务之间关系
原文链接:程序、进程、线程和任务之间关系
关系总览
程序(静态)
简单来说,程序可以描述为任何可执行文件。它包含一组完成特定的操作指令集合。它驻留在内存。它是一个被动的实体,不会因操作系统重新重启而消失。
进程(动态)
程序的任何运行实例都称为进程,也可以将其描述为正在执行的程序。一个程序可以有多个进程。进程驻留在主内存中,因此进程会随机器重启而消失。多个进程可以在多处理器系统上并行运行。
线程
线程通常被描述为轻量级进程。一个进程可以有多个线程。同一进程中的线程与该进程共享内存。线程和进程之间的本质区别是每个线程用于完成的工作。线程用于小而紧凑的任务,而进程用于更重的任务。
线程 vs. 进程
线程和进程之间的一个主要区别是,同一进程中的线程使用相同的地址空间,而不同的进程则不会。这允许线程读写公共共享和数据结构和变量,也增加了线程之间的通信。然而,进程间通信(即IPC)是非常困难的,并且需要耗费大量资源。
任务(抽象)
任务与线程非常相似,不同之处在于,它们通常不直接与操作系统交互。与线程池一样,任务不创建自己的OS线程。一个任务内部可能有也可能没有多个线程。
什么时候用任务?
任务比创建自己的线程更简单、更有效。
什么时候用线程?
你需要比任务提供的更多的控制,直接使用线程更有意义。
最重要的是,任务几乎总是最好的选择;它提供了一个更强大的API,并且避免了操作系统线程的浪费。在现代代码中显式创建自己的线程的唯一原因是设置每个线程选项,或者维护一个需要维护自己标识的持久线程。