文章目录
一、任务
任务是指由一个软件完成的活动,或者说是为实现某个目标(目的)的一系列操作,是一个逻辑概念。一个任务包含一个或多个完成单独功能的小任务(子任务)。例如,清理垃圾,我们使用一次是一个任务,而目的是删除清理掉我们计算机内的无用文件或危险文件,它包括了扫描、分类、识别、用户交互等子功能。
二、 进程
1.概念
进程通俗来讲可以说是正在运行的程序,严格来讲是指一个具有独立功能的程序在某个数据集合上的一次动态执行过程,是操作系统进行资源分配和调度的基本单元。一次任务的运行可以调动多个进程,通过这些进程相互合作来完成该项任务的最终目标。
2.主要特性
1.并发性:指系统中多个进程同时并发执行,互不影响。
2.动态性:指进程具有完整的生命周期,在其生命周期内进程状态是不断变化的。
3.交互性:指进程执行期间可能会与其他进程之间进行通信。
4.独立性:指进程是一个相对完整的资源分配和调度的基本单元,各进程的地址空间是相互独立的,只能通过某些特定的通信方式来实现交互。
3.分类
1)交互式进程,通常和用户进行交互,如shell命令进程,文本编辑等。
2)批处理进程,通常在后台运行,如编译器编译,数据库搜索引擎等。
3)守护进程,一直处于后台运行,系统启动开始运行,系统关闭结束运行。
4.进程状态
- [TASK_RUNNING]运行状态,表示符号:R,意味着进程正在运行或者在运行队列中等待调度。
- [TASK_INTERRUPTIBLE]可中断阻塞状态,表示符号:S,意味进程处于阻塞(睡眠)状态,等待某些事件发生或占用资源。
- [TASK_UNINTERRUPTIBLE]不可中断的阻塞状态,表示符号:D,意味着只有在它所等待的事件发生时,进程才会被唤醒。
- [TASK_STOPPED]暂停状态,表示符号:T,进程的执行被暂停,当进程收到SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU等信号,都会被停止。
- [EXIT_ZOMBIE]僵尸状态(僵死态),表示符号:Z,意味着子进程运行结束,父进程并未回收其资源。
- [EXIT_DEAD]死亡态,表示符号:X,意味着达到最终状态,父进程对子进程进行资源回收,子进程由系统删除不可见。
5.查看进程
1.windows系统查看
快捷键:Ctrl+Alt+Del
2.Linux系统查看
ps -ef #查看所有进程及其PID(进程号),系统时间,命令详细目录,执行者等
ps aux #除可显示-ef所有内容外,还可显示CPU及内存占用率,进程状态
top #动态显示系统中运行的程序
pstree #以树形方式显示进程
三、线程
为了提高效率,操作系统将线程引入,线程——CPU调度和分配的基本单元,也称之为轻量级进程,它可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程贡献,从而节省了上下文切换的开销。
一个进程可以有多个线程,其中每个线程共享该进程所拥有的资源(除了栈区内容),若进程内的线程对系统资源进行操作会给其他线程带来影响。(进程与线程之间的关系如图)
四、进程和线程的区别
进程是并发执行的程序在执行过程中分配和管理资源的基本单位。线程是进程的一个执行单元,是比进程还要小的独立运行的基本单位。一个程序至少有一个进程,一个进程至少有一个线程。两者的区别主要有以下几个方面:
- 进程是资源分配的最小单位。
- 线程是程序执行的最小单位,也是处理器调度的基本单位,但进程不是,两者均可并发执行。
- 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据,使用相同的地址空间,因此,CPU切换一个线程的花费远比进程小很多,同时创建一个线程的开销也比进程小很多。
- 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也跟着死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
- 进程切换时,消耗的资源大,效率低。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
- 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
五、进程和线程的优缺点:
- 线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。
- 程执行开销大,但是能够很好的进行资源管理和保护,可以跨机器迁移。
何时使用多进程,何时使用多线程?
- 对资源的管理和保护要求高,不限制开销和效率时,使用多进程。
- 要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。
小结
以上是最近阶段的一个小结,本文仅总结了进程,线程的相关概念,从而对其有一个清楚的认识,加深理解。如有错误,望路过的大佬们批评指正!✊