首页 > 系统相关 >进程与线程的概念

进程与线程的概念

时间:2024-02-01 20:31:40浏览次数:38  
标签:写入 程序 概念 线程 内存 进程 竞态

想必大家在使用计算机时都知道可以同时打开多个软件,比如Word、Visual Studio、QQ音乐。通常在办公的时候或者程序员在编程的时候,一边开发软件,一边听着歌曲。其实,这是操作系统为这三款不同的程序开辟了彼此独立的内存,以保证它们的良好运行。每一个程序都代表一个进程(Process)。进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程(Thread),一个进程可以运行多个线程,多个线程可共享数据。

进程与线程的概念_数据

笔者工作之地是深圳某某科技园区,里面入驻了上百家企业。如果把这个科技园区看成是一台计算机的话,那么科技园区的所属管理单位就是操作系统,里面的每家企业就是一个程序,也就是一个进程,而每个企业都可能有研发部、销售部、财务部、生产部等等,那么这些部门就是线程。每个部门都有自己的小金库——团队建设费。我们可以把每个线程的小金库理解成线程堆栈(Stack Memory),这部分内存是每个部门的自留地,私有财产神圣不可侵犯,所以线程堆栈只为线程服务,用于保存自身的一些数据,如函数中定义的局部变量、函数调用时传送的参数值等。所以值类型的数据都会保存在线程堆栈中,换句话说,程序员申请的所有值类型都会在线程堆栈中得到分配。

进程与线程的概念_子线程_02

有时候,部门和部门之间也是需要共享数据的,比如我们部门经常要借用生产部的设备材料。那这些设备材料就不能放在小金库里面了,于是,它们必须要放在大家都看得见够得着的地方——堆内存(Heap Memory)。在.NET这种托管环境下,堆由CLR(Common Language Runtime)管理,所以又称托管堆Managed Heap。例如使用new关键字创建类的对象实例时,分配给对象的内存单元就位于托管堆中。

我们在这里讲解进程和线程的概念,是因为将来开发程序时,往往要在一个程序中创建多个线程。C#程序拥有一个主线程,通常指UI线程,但是我们不能把所有代码都写在主线程中。如果某个执行单元需要耗费大量的时间,这时我们可以把这个执行单元看成是一个任务,然后创建一个子线程,在子线程中去执行这个任务。这样做的好处是,UI线程不会出现卡顿的情况,它会继续响应用户的键盘或鼠标操作,而背后的子线程同时也执行着我们需要处理的业务需求。

我们把开发拥有多个线程的程序称为多线程开发。在多线程开发中,往往需要访问同一片内存区域,比如对某个对象进行读写操作,由于堆内存上的数据可以共享,所以往往有多个线程在同时写堆内存上的数据时,会出现资源抢夺。意思是说,当两个线程在同一时钟周期尝试写入同一个内存地址时,可能会发生竞态条件(Race Condition)。

竞态条件是指多个线程或进程同时访问共享资源,并且最终的结果依赖于它们执行的相对速度或顺序。假如线程1和线程2同时写入某个内存地址,结果是不确定的:这可能导致内存中保存的是线程1和线程2的写入值的组合,或者是其中一个线程的写入值。这种竞态条件可能导致程序的行为不一致、数据损坏或其他错误。为了避免竞态条件,可以使用同步机制,如互斥锁(Mutex)或信号量(Semaphore),来确保在同一时间只有一个线程可以访问共享资源。这样可以保证线程按照正确的顺序进行写入操作,避免竞态条件的发生。

标签:写入,程序,概念,线程,内存,进程,竞态
From: https://blog.51cto.com/wpfsoft/9536212

相关文章

  • 一些经济概念
    1.降低利率意味着什么?按照人民网的说法:央行降息后与你有关的六大影响:利息变少房贷下降①去银行存钱,利息变少了②楼市影响:房贷利率下降月供压力小了③生活消费更加活跃④民众理财会有更多选择⑤降息直接利好高负债率行业,比如地产、基建、有色、煤炭、证券等行业。但银行业......
  • ConcurrentHashMap的线程安全
    ConcurrentHashMap是怎么做到线程安全的?   get方法如何线程安全地获取key、value?   put方法如何线程安全地设置key、value?   size方法如果线程安全地获取容器容量?   底层数据结构扩容时如果保证线程安全?   初始化数据结构时如果保证线程安全?ConcurrentHashMap......
  • concurrent hashmap put操作的线程安全
     减小锁粒度:将Node链表的头节点作为锁,若在默认大小16情况下,将有16把锁,大大减小了锁竞争(上下文切换),就像开头所说,将串行的部分最大化缩小,在理想情况下线程的put操作都为并行操作。同时直接锁住头节点,保证了线程安全Unsafe的getObjectVolatile方法:此方法确保获取到的值为最新  ......
  • 为系统守护进程预留计算资源
      参考文档:http://arthurchiao.art/blog/k8s-cgroup-zh/          --cgroups-per-qos默认开启。开启这个参数后,kubelet会将所有的pod创建在kubelet管理的cgroup层次结构下(这样才有了限制所有Pod使用资源总量的基础)。要想启用NodeAllocatable特......
  • ConcurrentHashMap是如何实现线程安全的
     但是又为何需要学习ConcurrentHashMap?用不就完事了?我认为学习其源码有两个好处:更灵活的运用ConcurrentHashMap欣赏并发编程大师DougLea的作品,源码中有很多值得我们学习的并发思想,要意识到,线程安全不仅仅只是加锁ConcurrentHashMap是怎么做到线程安全的?   get方法如何线......
  • 【操作系统和计网从入门到深入】(八)线程
    复习八·线程1.如何理解线程只要满足,比进程轻量化,cpu内所有线程资源共享,创建维护成本更低等要求,就能叫线程。不同的OS实现方式不同,下面这个是Linux特有的方案。Linux没有给线程重新设计数据结构!什么叫做进程?pcb+地址空间+页表CPU调度的基本单位:线程!2.开始使用pthre......
  • 深入浅出Java多线程(五):线程间通信
    引言大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第五篇内容:线程间通信。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!在现代编程实践中,多线程技术是提高程序并发性能、优化系统资源利用率的关键手段。Java作为主流的多线程支持语言,不仅提供了丰富的......
  • Go进程内存占用那些事(一)
    为什么要探究这个问题?作为基础设施供应商,自己的服务占用多少内存,为什么要占用这么多内存,需要能说的清楚。作为一个云计算开发,这点问题都弄不清楚,说不过去。§0x01范围讨论的只限于LinuxX86平台下,因为实用第一。内存页大小为4KiB。目标:说清楚一个大型的Go进程内存消耗在了哪......
  • 异构计算关键技术之多线程技术(三)
    异构计算关键技术之多线程技术(三)一、多线程概述1.多线程的概念与优劣多线程是指在程序中同时运行多个线程,每个线程都可以独立执行不同的代码段,且各个线程之间共享程序的数据空间和资源。优劣:优点:提高程序的处理能力,增加相应速度和交互性。缺点:线程的切换有一定的开销,且多线程容易......
  • 浏览器支持多线程下载,IDM还是地表最强吗?
    引言平时大家下载小文件一般会用浏览器自带的下载,而大文件却要搭配下载器(比如有亿点点贵的IDM),但是大家知道吗,我们的浏览器自带多线程下载,只是默认是禁用的,试了试真的还不错!启动新功能这里以新版MicrosoftEdge为例,打开edge://flags/#enable-parallel-downloading(Chrome为c......