程序通俗地说就是由源代码生成的可执行应用。
进程就是当一个程序开始运行时,它就是一个进程。进程包括运行中的程序和程序所使用到的内存和系统资源。即进程包括该程序以及运行该程序所需要的内存和资源(如CPU)。一个进程是由一或多个线程组成,进程只负责资源(如CPU)的调度和分配,线程才是真正执的执行单元,使用进程给予的资源进行处理操作。
线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的。即不同的线程可以执行同一份代码段。线程在整个程序运行的过程中是独立运行的,且线程和线程之间是透明的,即线程本身是不知道有其它线程存在的。
每个正在运行的程序(即进程),至少包括一个线程, 这个线程叫做主线程。
主线程在程序启动时被创建,用于执行main函数。
只有一个主线程的程序,称之为单线程程序。
主线程负责执行程序的所有代码,这些代码只能顺序执行,不能并发执行。
多线程是指程序中包含多个执行流,即在一个程序中可以运行多个不同的线程来执行不同的任务,也就是说单个程序可以创建多个并行执行的线程来完成各自的任务。主线称之外的均为子线程,子线程和主线程都是独立的运行单元,各自的执行互不影响。
可以提高CPU的利用率。在多线程编程中,一个线程必须等待时,CPU可以运行其它的线程而不是处理等待过程中,这样可以极大提高程序的执行效率。
线程也是程序的一部分,即线程也需要占用内存,线程越多占用的内存越多,非常依赖硬件的优劣。
多线程需要协调和管理,即需要CPU时间跟踪线程。
线程之间对共享资源的写操作会相互影响。
线程过多会导致控制以及逻辑都太过复杂,最终出现很多Bug。
【点击跳转】