• 线程和进程的比较


    一个程序就是一个进程,而一个程序中的多个任务则被称为线程。进程是表示资源分配的基本单位,又是调度运行的基本单位。线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。 进程和线程的关系
    (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。
    (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
    (3)处理机分给线程,即真正在处理机上运行的是线程。
    (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
    如果把上课的过程比作进程,那么每个学生就是一个线程,他们共享教室,即线程共享进程的内存空间。每一个时刻,只能一个学生问老师问题,老师回答完毕,轮到下一个。即线程在一个时间片内占有cpu

    一个关于进程和线程的例子:

      试想当两个程序员在两个独立的办公室一起做一个软件项目,他们可以安静地工作、不互相干扰,并且他们人手一套参考手册。但是,他们沟通起来就有些困难,比起可以直接互相交谈,他们必须使用电话、电子邮件或到对方的办公室进行直接交流。并且,管理两个办公室需要有一定的经费支出,还需要购买多份参考手册。

      假设,让开发人员同在一间办公室办公,他们可以自由的对某个应用程序设计进行讨论,也可以在纸或白板上轻易的绘制图表,对设计观点进行辅助性阐释。现在,你只需要管理一个办公室,只要有一套参考资料就够了。遗憾的是,开发人员可能难以集中注意力,并且还可能存在资源共享的问题(比如,“参考手册哪去了?”)

      以上两种方法,描绘了并发的两种基本途径。每个开发人员代表一个线程,每个办公室代表一个处理器。第一种途径是有多个单线程的进程,这就类似让每个开发人员拥有自己的办公室,而第二种途径是在单一进程里有多个线程,如同一个办公室里有两个开发人员。让我们在一个应用程序中简单的分析一下这两种途径。

      线程很像轻量级的进程:每个线程互相独立运行,且线程可以在不同的指令序列中运行。但是,进程中的所有线程都共享地址空间(堆上的空间共享,栈上的空间独立),并且所有线程访问到大部分数据——全局变量仍然是全局的,指针、对象的引用或数据可以在线程之间传递。虽然,进程之间通常共享内存,但是这种共享通常也是很难建立,且难以管理。因为,同一数据的内存地址在不同的进程中是不相同。

      地址空间共享,以及缺少线程间数据的保护,使得操作系统的记录工作量减少,所以使用多线程相关的开销远小于使用多个进程,不过,共享内存的灵活性是有代价的:如果数据要被多个线程访问,那么程序员必须确保每个线程所访问到的数据是一致的。

  • 相关阅读:
    Cobalt Strike系列教程第二章:Beacon详解
    Cobalt Strike系列教程第一章:简介与安装
    安全意识第九期丨软件暗藏陷阱 下载要三思
    安全意识第八期丨OMG!发个帖子竟然摊上大事了
    新手教程丨利用Python制作一款截图识别软件!
    2019互联网安全城市巡回赛·北京站——巅峰对决,邀你来战!
    安全意识第七期丨双11优惠券“1元抵1000”,速来领!
    《0day安全软件漏洞分析技术》学习笔记
    安全意识第六期丨谁来帮帮我,改签机票为什么被扣2万元?
    C#常用功能函数小结(.NET 4.5)
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/9729789.html
Copyright © 2020-2023  润新知