并发与线程、进程基本概念

发布于:2024-05-08 ⋅ 阅读:(28) ⋅ 点赞:(0)

目录

并发

可执行程序

进程与线程

进程

线程

线程与进程局别

并发的实现

多进程并发

多线程并发


并发

并发字面上就是多个相对独立的事件一起发生。代表了在同一时间内处理多个任务或进程的能力。我们日常生活中有很多并发例子,如一边看电影一边吃零食,一边打游戏一边听音乐。而在计算机系统中,并发通常通过多线程、多进程、异步编译等技术实现,来使一个程序中同时执行多个独立任务。CPU是顺序执行的,单个的CPU不能够同时执行多个任务。在单核CPU时期,CPU通过交替执行任务,快速的在多个任务之间切换,使得在短时间内每个任务都得到一定的执行时间,达到了多个任务一起执行的效果。但是这种切换是有一定的开销的,当从一个任务切换到另一个任务时,需要对本任务的数据,执行状况等进行保存,以便下次切换到本任务的时候能够恢复任务的执行状况,并继续执行。但是这种切换会占用本该用于执行任务的时间。随着计算机硬件的发展,多核CPU出现真正的实现了多任务并发。但CPU依然是不断切换任务执行的。

可执行程序

可执行程序(executable program,EXE File)是可在操作系统存储空间中浮动定位的二进制可执行程序。它可以加载到内存中,由操作系统加载并执行。特定的CPU指令集(如X86指令集)对应的不同平台之间的可执行程序不可直接移植运行。实际上就是磁盘上的可执行文件,Windows上就是有.exe,.com后缀的文件,Linux上也可以通过文件属性判断。

进程与线程

进程和线程都是操作系统中用于管理程序执行的概念。

进程

进程是拥有资源的一个独立单位,是操作系统资源分配的最小单位。当代码编译完成后调用时,系统就会执行相对应的可执行的.exe文件。这种正在执行的执行着的可执行文件就是进程。文件执行完毕时,进程也随之结束。运行的可执行文件,也就是进程是可以在电脑任务管理器中观察到的。

线程

线程是程序执行的最小单位,是操作系统调度执行的最小单位。一个进程可以包含多个线程,且至少包含一个主线程(主线程是唯一的)。主线程的生命周期是和进程一致。代码执行时,就是进程中的主线程执行main函数的,可以说一条线程就是一条代码的执行通路。对于自主创建的线程,会和主线程并发一段事件,同时执行。不同线程之间有各自的堆栈和局部变量。这些各自占有的空间和CPU切换时需要保存的执行状况数据都会造成一定的消耗。因此线程并不是越多越好,要根据实际情况来设定创建线程的数量。

线程与进程局别

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响。而线程只是一个进程中的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

并发的实现

多进程并发

多进程并发是指操作系统同时运行多个进程,每个进程拥有自己的地址空间和资源。多进程并发可以提高系统的稳定性和可靠性,因为一个进程崩溃不会影响其他进程的执行。此外,由于每个进程有自己的地址空间,因此进程之间的数据隔离更加安全。但是,多进程并发也存在一些问题,如进程之间的数据共享和通信比较困难,需要使用进程间通信(IPC)机制来实现。同时进程切换的开销也比较大,会降低程序的执行效率。

多线程并发

多线程并发是指在一个进程中创建多个线程,这些线程共享进程的资源,如内存空间、文件句柄等,但每个线程有自己的堆栈和局部变量。合理的多线程并发可以提高程序的执行效率,因为线程之间的切换比进程之间的切换要快得多。此外,由于线程共享进程的一些资源,因此线程之间的数据共享和通信也更加方便。然而,多线程并发也存在一些问题,如线程同步和通信的复杂性、死锁等问题,需要进行额外的处理。