zoukankan      html  css  js  c++  java
  • 线程是什么?进程是什么?二者有什么区别和联系?

    1.线程是什么?进程是什么?二者有什么区别和联系?
    (1)线程是CPU独立运行和独立调度的基本单位;
    (2)进程是资源分配的基本单位;
    两者的联系:进程和线程都是操作系统所运行的程序运行的基本单元。
    区别:
    (1)进程具有独立的空间地址,一个进程崩溃后,在保护模式下不会对其它进程产生影响。
    (2)线程只是一个进程的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。


    什么是堆栈?有什么区别?
    堆栈都是一种数据项按序排列的数据结构,只能在一端对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。要点:堆,队列优先,先进先出(FIFO—first in first out)[1]  。栈,先进后出(FILO—First-In/Last-Out)。

    内存的分区:常量区,静态区(全局区),堆,栈,代码区
         1.管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生内存泄露。
         2.申请大小:如果栈申请的空间超过栈的剩余空间时,将提示内存溢出(8M)。因 此,能从栈获得的空间较小。堆是由于系统是用链表来存储的空闲内存地址的,不是连续的堆获的空间比较灵活,也比较大。
         3.碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎 片,使程序效率降低对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出
         4.分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。
         5.分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的

    多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差写,对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

    什么是多线程?
    多线程:是指从软件或者硬件上实现多个线程的并发技术。
    多线程的好处:
    (1)使用多线程可以把程序中占据时间长的任务放到后台去处理,如图片、视屏的下载
    (2)发挥多核处理器的优势,并发执行让系统运行的更快、更流畅,用户体验更好
    多线程的缺点:
    (1)大量的线程降低代码的可读性;
    (2)更多的线程需要更多的内存空间
    (3)当多个线程对同一个资源出现争夺时候要注意线程安全的问题。
    IOS中实现多线程的方法
    常用的:NSThread NSOperationQueue GCD

  • 相关阅读:
    WPF程序国际化
    MVVM框架搭建
    最全前端开发面试问题及答案整理
    最小化运行批处理
    C#中App.config文件配置获取
    VS2017 打包成exe
    Inno Setup生成桌面快捷方式
    C#文件读写(txt 简单方式)
    Flume 学习笔记之 Flume NG概述及单节点安装
    快学Scala 第二十课 (trait的构造顺序)
  • 原文地址:https://www.cnblogs.com/yyxblogs/p/4856381.html
Copyright © 2011-2022 走看看