1、线程的基本概念

概念:

线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

好处 :

(1)易于调度。 (2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。 (3)开销少。创建线程比创建进程要快,所需开销很少。。 (4)利于充分发挥多处理器的功能。通过创建多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。

2、进程的基本状态及状态之间的关系

状态:运行、阻塞、挂起阻塞、就绪、挂起就绪

状态之间的转换:准备就绪的进程,被CPU调度执行,变成运行态; 运行中的进程,进行I/O请求或者不能得到所请求的资源,变成阻塞态; 运行中的进程,进程执行完毕(或时间片已到),变成就绪态; 将阻塞态的进程挂起,变成挂起阻塞态,当导致进程阻塞的I/O操作在用户重启进程前完成(称之为唤醒),挂起阻塞态变成挂起就绪态,当用户在I/O操作结束之前重启进程,挂起阻塞态变成阻塞态; 将就绪(或运行)中的进程挂起,变成挂起就绪态,当该进程恢复之后,挂起就绪态变成就绪态;

3、线程和进程的关系以及区别?

进程和线程的关系:

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 (3)处理机分给线程,即真正在处理机上运行的是线程。 (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.

进程与线程的区别:

(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

4、进程间通信的方式

(1)管道(pipe)及有名管道(named pipe):管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

(2)信号(signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。

(3)消息队列(message queue):消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。

(4)共享内存(shared memory):可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。

(5)信号量(semaphore):主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。

(6)套接字(socket):这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。

5、同步和互斥的区别:

当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源。例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件中的字符数。当然,在把整个文件调入内存之前,统计它的计数是没有意义的。但是,由于每个操作都有自己的线程,操作系统会把两个线程当作是互不相干的任务分别执行,这样就可能在没有把整个文件装入内存时统计字数。为解决此问题,你必须使两个线程同步工作。

所谓同步,是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。如果用对资源的访问来定义的话,同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

所谓互斥,是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。如果用对资源的访问来定义的话,互斥某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

进程与线程的联系和区别?相关推荐

  1. C语言笔试线程和进程的区别,进程和线程的定义和区别

    进程和线程的定义和区别 1.进程定义 进程:是具有一定独立功能的程序关于某个数据集合上的一次进行活动,是系统进行资源分配和调度的一个独立单位. 2.线程定义 线程:是进程的一个实体,是cpu调度和分派 ...

  2. 进程和线程的关系与区别

    1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基 ...

  3. 进程和线程的定义和区别

    进程:进程是系统分配资源和调度的基本单位,也就是说进程可以单独运行一段程序. 线程:线程是cpu调度和分派的最小基本单位. 区别: 1.一个进程可以包含至少一个线程,一般来说也就是主线程,而一个线程只 ...

  4. 进程和线程的概念、区别和联系

    进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 进程与线程的一个简单解释 在这 ...

  5. 进程和线程的本质和区别

    进程是什么? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次 ...

  6. goroutine调度详解,以及进程、线程、协程区别

    转载地址:https://blog.csdn.net/Arlingtonroad/article/details/106952053?utm_medium=distribute.pc_relevant ...

  7. 进程和线程的联系和区别

    2019独角兽企业重金招聘Python工程师标准>>> 定义: 一.进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位. 二.线程是 ...

  8. 进程和线程的定义、区别与联系

    一.进程 进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令.数据和堆栈等组成的,是一个能独立运行的活动实体. 注意,进程一般有三个状态:就绪状态.执行状态和等待状态[或称阻塞状态 ...

  9. 程序、任务、进程和线程的联系与区别

    概念: 程序(program)只是一组指令的有序集合. 任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动.一个任务既可以是一个进程,也可以是一个线程.简而言之,它指的是一系列共同 ...

  10. 进程、线程、程序的区别

    一.程序.进程.线程的概念 程序:一组计算机能识别和执行的指令.它是一些保存在磁盘上的指令的有序集合 进程:进程是一个独立的可调度的任务,进程是一个抽象的实体,当系统在执行某个程序时,分配和释放的各种 ...

最新文章

  1. 书评 | 9 年码龄工程师读 Android 经典
  2. linux显示磁盘使用情况命令,Linux显示磁盘使用率信息(iostat)
  3. 【完整示例】采用jenkins pipeline实现自动构建并部署至k8s
  4. 项目中遇到问题的解决方法合集
  5. 【转】C++中的static_cast ,reinterpret_cast的用法和区别
  6. java 复合_【福利】java新手做的复合型计算器!
  7. LPeg 0 10的编译与使用
  8. WriteFile API简介
  9. PHP中的Array类型其实是Hashtable
  10. 从苏宁电器到卡巴斯基第22篇:单证这一年(下)
  11. Kubernetes(k8s)从入门到精通
  12. 【数智化人物展】网智天元莫倩:“感、联、知、控”,四步方可打造企业数智化转型升级路径...
  13. 陌生人邀请我加入CS:GO游戏,我一接受就被盗号了
  14. 编辑商品按钮显示商品对应数据
  15. JetBrains .idea project directory (详细利用教程)
  16. Java扑克牌中的顺子
  17. 财务人员python教程_财务有必要学python吗
  18. 面向行业智能,华为数据通信推动的2020之变
  19. Texstudio 英文拼写检查功能出问题的解决方法
  20. 浏览器及一些常用的兼容性

热门文章

  1. echarts中横坐标值显示不全(自动隐藏)解决方案
  2. golang中的atomic,以及CAS操作
  3. 偷窥OpenCv背后的秘密
  4. JAVA修改dmp版本号12g到11,又见bug,动态调整SGA参数导致数据库crash
  5. onenet物联网平台使用
  6. Vue 在图片加载过程中遇到的问题
  7. python文件读写 npy
  8. Unity 之 匹配手机的返回键的方法
  9. wps python 自动化_Python3+Selenium+Chrome实现自动填写WPS表单
  10. 5G NGC — UPF 用户面功能